알고리즘/BOJ

[BOJ] 2504. 괄호의 값

재담 2022. 3. 28. 01:33

문제 원본 : https://www.acmicpc.net/problem/2504

 

2504번: 괄호의 값

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

www.acmicpc.net

import java.io.*;
import java.util.Stack;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        String s = br.readLine();
        Stack<Character> stack = new Stack<>();
        int tmp = 1;
        int ans = 0;

        for (int i = 0; i < s.length(); ++i) {
            char c = s.charAt(i);
            if (c == '(') {
                stack.push(c);
                tmp *= 2;
            } else if (c == ')') {
                if (stack.isEmpty() || stack.peek() != '(') {
                    ans = 0;
                    break;
                } else {
                    stack.pop();
                    if (s.charAt(i - 1) == '(') {
                        ans += tmp;
                    }
                    tmp /= 2;
                }
            } else if (c == '[') {
                stack.push(c);
                tmp *= 3;
            } else if (c == ']') {
                if (stack.isEmpty() || stack.peek() != '[') {
                    ans = 0;
                    break;
                } else {
                    stack.pop();
                    if (s.charAt(i - 1) == '[') {
                        ans += tmp;
                    }
                    tmp /= 3;
                }
            }
        }

        if (!stack.isEmpty()) {
            ans = 0;
        }

        bw.write(String.valueOf(ans));

        bw.close();
        br.close();
    }
}
  • 스택을 활용한 문제
  • 풀다가 도저히 모르겠어서 블로그를 참조했다.
  • 분배 법칙을 이용하면 답을 구할 수 있다.
  • 마지막에 스택이 비어 있는지도 확인해야 한다.

'알고리즘 > BOJ' 카테고리의 다른 글

[BOJ] 13305. 주유소  (0) 2022.03.30
[BOJ] 9184. 신나는 함수 실행  (0) 2022.03.29
[BOJ] 15663. N과 M (9)  (0) 2022.03.27
[BOJ] 1748. 수 이어 쓰기 1  (0) 2022.03.26
[BOJ] 1946. 신입 사원  (0) 2022.03.25