문제 원본 : https://www.acmicpc.net/problem/2504
2504번: 괄호의 값
4개의 기호 ‘(’, ‘)’, ‘[’, ‘]’를 이용해서 만들어지는 괄호열 중에서 올바른 괄호열이란 다음과 같이 정의된다. 한 쌍의 괄호로만 이루어진 ‘()’와 ‘[]’는 올바른 괄호열이다. 만일
www.acmicpc.net
import java.io.*;
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 s = br.readLine();
Stack<Character> stack = new Stack<>();
int tmp = 1;
int ans = 0;
for (int i = 0; i < s.length(); ++i) {
char c = s.charAt(i);
if (c == '(') {
stack.push(c);
tmp *= 2;
} else if (c == ')') {
if (stack.isEmpty() || stack.peek() != '(') {
ans = 0;
break;
} else {
stack.pop();
if (s.charAt(i - 1) == '(') {
ans += tmp;
}
tmp /= 2;
}
} else if (c == '[') {
stack.push(c);
tmp *= 3;
} else if (c == ']') {
if (stack.isEmpty() || stack.peek() != '[') {
ans = 0;
break;
} else {
stack.pop();
if (s.charAt(i - 1) == '[') {
ans += tmp;
}
tmp /= 3;
}
}
}
if (!stack.isEmpty()) {
ans = 0;
}
bw.write(String.valueOf(ans));
bw.close();
br.close();
}
}
- 스택을 활용한 문제
- 풀다가 도저히 모르겠어서 블로그를 참조했다.
- 분배 법칙을 이용하면 답을 구할 수 있다.
- 마지막에 스택이 비어 있는지도 확인해야 한다.
'알고리즘 > BOJ' 카테고리의 다른 글
| [BOJ] 13305. 주유소 (0) | 2022.03.30 |
|---|---|
| [BOJ] 9184. 신나는 함수 실행 (0) | 2022.03.29 |
| [BOJ] 15663. N과 M (9) (0) | 2022.03.27 |
| [BOJ] 1748. 수 이어 쓰기 1 (0) | 2022.03.26 |
| [BOJ] 1946. 신입 사원 (0) | 2022.03.25 |