[백준] 2504 괄호의 값

문제링크 : https://www.acmicpc.net/problem/2504

 

2504번: 괄호의 값

4개의 기호 ‘(’, ‘)’, ‘[’, ‘]’를 이용해서 만들어지는 괄호열 중에서 올바른 괄호열이란 다음과 같이 정의된다. 한 쌍의 괄호로만 이루어진 ‘()’와 ‘[]’는 올바른 괄호열이다. 만일 X

www.acmicpc.net

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;

public class BJ2504 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String input = br.readLine();

        Stack<Character> stack = new Stack<>();
        int res = 0;
        int value = 1;  // 값을 저장할 임시 변수

        for (int i=0; i<input.length(); i++){
            char c = input.charAt(i);

            // 열린 괄호는 stack에 넣어줌
            if (c == '('){
                stack.push(c);
                value *= 2;
            } else if (c == '[') {
                stack.push(c);
                value *= 3;

            // 닫힌 괄호를 만났을 때
            } else if (c == ')') {
                // 스택이 비어있거나, 스택 최상단의 괄호와 다르면 올바른 괄호열이 아니기 때문에 res 0으로 초기화
                if (stack.isEmpty() || stack.peek() != '('){
                    res = 0;
                    break;

                // 올바른 괄호열일 경우 결괏값에 value를 더해줌
                } else if (input.charAt(i-1) == '(') {
                    res += value;
                }
                stack.pop();
                value /= 2;
            } else if (c == ']'){
                if (stack.isEmpty() || stack.peek() != '['){
                    res = 0;
                    break;
                } else if (input.charAt(i-1) == '['){
                    res += value;
                }
                stack.pop();
                value /= 3;
            }
        }

        if (!stack.isEmpty()){
            System.out.println(0);
        }else{
            System.out.println(res);
        }
    }
}

'Algorithm > Java' 카테고리의 다른 글

[백준] 1940 주몽  (1) 2024.03.06
[백준] 1806 부분합  (1) 2024.03.04
[백준] 2258 정육점  (0) 2024.02.17
[백준] 3020 개똥벌레  (1) 2024.02.10
[백준] 2578 빙고  (1) 2024.02.06