문제: 2504번: 괄호의 값
#include <map>
#include <set>
#include <cmath>
#include <queue>
#include <stack>
#include <vector>
#include <string>
#include <iostream>
#include <algorithm>
#include <iomanip> // setprecision을 사용하기 위한 헤더
#include <climits>
using namespace std;
int main() {
string str;
cin >> str;
int tmp = 1;
int ans = 0;
stack<char> stack;
for (int i = 0; i < str.size(); i++) {
if (str[i] == '(') {
stack.push('(');
tmp *= 2;
}
else if (str[i] == '[') {
stack.push('[');
tmp *= 3;
}
else if (str[i] == ')') {
if (stack.empty() || stack.top() != '(') {
ans = 0;
break;
}
else if (str[i - 1] == '(') {
ans += tmp;
tmp /= 2;
stack.pop();
}
else {
tmp /= 2;
stack.pop();
}
}
else {
if (stack.empty() || stack.top() != '[') {
ans = 0;
break;
}
else if (str[i - 1] == '[') {
ans += tmp;
tmp /= 3;
stack.pop();
}
else {
tmp /= 3;
stack.pop();
}
}
}
if (!stack.empty())
ans = 0;
cout << ans;
return 0;
}
한 40분 고민했는데 안 풀리길래 오늘은 어쩔 수 없이 다른 사람 코드를 먼저 봐버렸다.. 너무 어렵다 ㅠ_ㅠ;;; 솔직히 이해 잘 못 한 것 같아서 내일 일어나서 다시 스스로 풀고 다시 정리해야 할 것 같다..
참고자료: