본문 바로가기
Problem Solving/Baekjoon

[백준] 2504 괄호의 값 - Data Structure / Java

by graycode 2022. 11. 28.

 문제 링크

 

2504번: 괄호의 값

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

www.acmicpc.net

 

 풀이 과정

 

 풀이 코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
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 input = br.readLine();

        Stack<Character> stk = new Stack<>();
        int res = 0;
        int tmp = 1;

        for (int i = 0; i < input.length(); i++) {
            char token = input.charAt(i);
            if (token == '(') {
                stk.push(token);
                tmp *= 2;
            } else if (token == '[') {
                stk.push(token);
                tmp *= 3;
            } else if (token == ')') {
                if (stk.empty() || stk.peek() != '(') {
                    res = 0;
                    break;
                }
                if (input.charAt(i - 1) == '(')
                    res += tmp;

                stk.pop();
                tmp /= 2;
            } else if (token == ']') {
                if (stk.empty() || stk.peek() != '[') {
                    res = 0;
                    break;
                }
                if (input.charAt(i - 1) == '[')
                    res += tmp;

                stk.pop();
                tmp /= 3;
            }
        }

        if (!stk.empty())
            res = 0;

        bw.write(String.valueOf(res));
        bw.flush();
    }

}

댓글