
스택을 활용해서 풀 수 있는 문제!
괄호 관련된 문제는 스택으로 풀 수 있는 것 같다.
char형을 담을 stack을 선언한다.
1. '(' 를 만날 때
계수에 2를 곱한 후, '('를 stack에 push 한다.
2. '{' 일 경우
계수에 3을 곱한 후, '{'을 stack에 push 한다.
3. ')' 일 경우
stack에서 괄호를 뻄 (pop)
계수를 2로 나눈다.
- stack이 비어있거나 stack의 가장 위에 있는값이 '(' 이 아닐경우
올바른 입력이 아니므로, 반복문을 탈출한다.
- i-1번째 인덱스 문자열이 '(' 인 경우 sum에 계수(num)를 더한다.
4. ']' 인 경우
stack에서 괄호를 뺌 (pop)
계수를 3으로 나눈다.
- stack이 비어있거나 stack의 가장 위에 있는값이 '[' 이 아닐경우
올바른 입력이 아니므로, 반복문을 탈출한다.
- i-1번째 인덱스 문자열이 '[' 인 경우 sum에 계수(num)를 더한다.
package 백준.스택;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
public class baekjoon_2504 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = br.readLine();
Stack<Character> stack = new Stack<>();
int sum = 0;
int num = 1;
for (int i = 0; i < input.length(); i++) {
char ch = input.charAt(i);
if (ch == '(') {
num *= 2;
stack.push(ch);
}
if (ch == '[') {
num *= 3;
stack.push(ch);
}
if (ch == ')') {
if (stack.isEmpty() || stack.peek() != '(') {
sum = 0;
break;
} else if (input.charAt(i - 1) == '(') {
sum += num;
}
stack.pop();
num /= 2;
}
if (ch == ']') {
if (stack.isEmpty() || stack.peek() != '[') {
sum = 0;
break;
} else if (input.charAt(i - 1) == '[') {
sum += num;
}
stack.pop();
num /= 3;
}
}
if (!stack.isEmpty()) sum = 0;
System.out.println(sum);
}
}

'PS' 카테고리의 다른 글
| [백준] 1542번 - 잃어버린 괄호 (0) | 2025.02.15 |
|---|---|
| [백준] 11047번 동전 0 (0) | 2025.01.30 |
| [백준] 2751번 - 수 정렬하기 2 (시간 초과) (1) | 2025.01.12 |
| [백준] 16564 - 히오스 프로그래머 (2) | 2025.01.11 |
| [프로그래머스] lv2. 가장 큰 수 (1) | 2025.01.04 |