점점 강해지고 있습니다.
[Java] 백준 2504번: 괄호의 값
풀이 코드
스택을 사용하는 문제 중 하나이다. (
나 [
등 여는 괄호가 나온다면 스택에다가 쌓고, 반대로 )
나 ]
가 나온다면 검사를 하게 된다.
만약 ()
나 []
로 되지 않고 (]
등으로 짝이 맞지 않는다거나, 문자열 검사가 끝났는데 스택이 비어있지 않다면 틀린 괄호열이니 0을 출력한다.
풀이 방법
package Week3;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Stack;
public class BOJ_2504_괄호의_값 {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
Stack<Character> stack = new Stack<>();
int value = 1, result = 0;
for(int i=0; i<str.length(); i++) {
if(str.charAt(i) == '(') {
stack.add('(');
value *= 2;
} else if(str.charAt(i) == '[') {
stack.add('[');
value *= 3;
} else if (str.charAt(i) == ')'){
if(stack.isEmpty() || stack.peek() != '(') {
result = 0;
break;
} else if(str.charAt(i-1) == '(') {
result += value;
}
value /= 2;
stack.pop();
} else if(str.charAt(i) == ']') {
if(stack.isEmpty() || stack.peek() != '[') {
result = 0;
break;
} else if(str.charAt(i-1) == '[') {
result += value;
}
value /= 3;
stack.pop();
}
}
if(!stack.isEmpty()) result = 0;
System.out.println(result);
}
}
Thank You For Reading