Algorithms/Java

백준 2504: 괄호의 값 (java)

Jenn28 2024. 5. 14. 19:31
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Stack;

public class BOJ2504 {
    int val = 1, result = 0;
    Stack<Character> stack = new Stack<>();

    public void solution() throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String s = br.readLine();

        for (int i = 0; i < s.length(); i++) {
            // 여는 괄호인 경우 push
            if (s.charAt(i) == '(') {
                stack.push(s.charAt(i));
                val *= 2;
                continue;
            }
            if (s.charAt(i) == '[') {
                stack.push(s.charAt(i));
                val *= 3;
                continue;
            }

            // 닫는 괄호인 경우 pop
            if (s.charAt(i) == ')') {
                if (stack.isEmpty() || stack.peek() != '(') {
                    result = 0;
                    break;
                }
                if (s.charAt(i-1) == '(') {
                    result += val;
                }
                stack.pop();
                val /= 2;
                continue;
            }
            if (s.charAt(i) == ']') {
                if (stack.isEmpty() || stack.peek() != '[') {
                    result = 0;
                    break;
                }
                if (s.charAt(i-1) == '[') {
                    result += val;
                }
                stack.pop();
                val /= 3;
            }
        }

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

    public static void main(String[] args) throws Exception {
        new BOJ2504().solution();
    }
}

 

나는 스택에 괄호랑 숫자랑 모두 넣어서 푸는 방식으로 해결법을 찾았는데,

구현하려고보니 스택에 두가지 데이터타입을 넣을 수 없기에.. 탈락됐다.

 

내가 구현하고 싶었던 풀이랑 비슷했던게 아래 르네님 풀이법인데,

값을 위한 스택을 따로 둬서 푸셨다.

https://upcurvewave.tistory.com/629

 

백준 2504 괄호의 값 (JAVA 자바 풀이)

백준 2504 괄호의 값 (JAVA 자바 풀이) 문제 4개의 기호 ‘(’, ‘)’, ‘[’, ‘]’를 이용해서 만들어지는 괄호열 중에서 올바른 괄호열이란 다음과 같이 정의된다. 한 쌍의 괄호로만 이루어진 ‘()

upcurvewave.tistory.com

 

다만, 곱셈법칙을 이용하면 좀 더 간단하게 풀 수 있어서 곱셈법칙 풀이를 채택하기로 했다.