
스택을 이용해서 푸는 문제였다.
처음에는 괄호마다 값을 따로 계산해야 한다고 생각했지만,
사실은 하나의 cnt 값에 깊이(중첩)에 따라 곱을 누적해주는 방식으로 생각하면 훨씬 쉽게 풀린다.
1. 이전의 값이 괄호 여는 것이었다면 바로 result에 반영 후, cnt를 나누기
2. 이전의 값이 괄호 여는 것이 아니라면 cnt만 나누기
구현한 코드는 아래와 같다.
#include <iostream>
#include <stack>
#define endl "\n"
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
stack<char> stack;
long long result = 0;
long long cnt = 1;
char c;
char before = '\0';
while (cin.get(c)) {
if (c == '(') {
stack.push(c);
cnt*=2;
} else if (c == '[') {
stack.push(c);
cnt*=3;
} else if (c == ')') {
if (stack.empty() || stack.top() != '(') {
result = 0;
break;
}
stack.pop();
if (before == '(') {
result += cnt;
}
cnt /= 2;
} else if (c == ']') {
if (stack.empty() || stack.top() != '[') {
result = 0;
break;
}
stack.pop();
if (before == '[') {
result += cnt;
}
cnt /= 3;
}
before = c;
}
cout << (stack.size() > 0 ? 0 : result) << endl;
}'Algorithm > BOJ' 카테고리의 다른 글
| [백준] 2252번 Gold 3 줄 세우기, C++ 코드 (0) | 2025.12.14 |
|---|---|
| [백준] 2623번 Gold 3 음악프로그램, C++ (0) | 2025.12.14 |
| [백준] 10799번 SIlver 2 쇠막대기, C++ 코드 (0) | 2025.12.12 |
| [백준] 11003번 Gold 1 최솟값 찾기, C++ 코드 (0) | 2025.12.11 |
| [백준] 18258번 Silver 4 큐 2, C++ 코드 (0) | 2025.12.11 |