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
다만, 곱셈법칙을 이용하면 좀 더 간단하게 풀 수 있어서 곱셈법칙 풀이를 채택하기로 했다.