✉️문제
https://www.acmicpc.net/problem/2504
📝 접근
분배법칙을 이용하면 쉽게 풀 수 있다. 일단 stack과 Tmp 변수를 준비하자. 여기에 분배법칙을 한 값들을 더 해줄 예정이다.
1. ‘(’이면 tmp변수에 2를 곱해준다.
2. ‘[’이면 tmp변수에 3을 곱해준다.
3. ‘)’일 때
a. 만약 stack이 비어있거나, ‘(’가 아니면 잘못된 입력이므로 종료한다.
b. 이전 문자가 ‘(’ 이면 answer에 tmp를 더 해준다.
4. ‘]’일 때
a. 만약 stack이 비어있거나, ‘[’가 아니면 잘못된 입력이므로 종료한다.
b. 이전 문자가 ‘[’ 이면 answer에 tmp를 더 해준다.
🗝 문제풀이
package step2;
import java.util.Scanner;
import java.util.Stack;
public class Q2504 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String input = sc.next();
Stack<Character> stack = new Stack<>();
int result = 0;
int value = 1;
for(int i = 0; i < input.length(); i++) {
char cur = input.charAt(i);
if(cur == '(') {
stack.push(cur);
value *= 2;
continue;
}
if(cur == '[') {
stack.push(cur);
value *= 3;
continue;
}
if(cur == ')') {
if(stack.isEmpty() || stack.peek() != '(') {
result = 0;
break;
}
if(input.charAt(i-1) == '(') {
result += value;
}
stack.pop();
value /= 2;
continue;
}
if(cur == ']') {
if(stack.isEmpty() || stack.peek() != '[') {
result = 0;
break;
}
if(input.charAt(i-1) == '[') {
result += value;
}
stack.pop();
value /= 3;
}
}
if(!stack.isEmpty()) System.out.println(0);
else System.out.println(result);
}
}