간단한 구현 문제이다. 반복문을 통해 문자열을 차례대로 접근하면서 (
이거나 [
일 경우 스택에 넣어주고 해당하는 괄호의 값을 곱해주었다. 그리고 )
이나 ]
일 경우 먼저 올바른 괄호인지 확인을 한 후 바로 이전이 여는 괄호였다면 answer
에 더해주고 스택을 pop을 해주고 해당 괄호의 값을 나누어주었다. 어렵지 않게 풀 수 있었던 문제였다.
#include <iostream>
#include <vector>
using namespace std;
string s;
void solution() {
int answer = 0;
vector<char> v;
int tmp = 1;
for (int i = 0; i < s.size(); i++) {
if (s[i] == '(') {
tmp *= 2;
v.push_back('(');
}
else if (s[i] == '[') {
tmp *= 3;
v.push_back('[');
}
else if (s[i] == ')') {
if (v.empty() || v.back() != '(') {
answer = 0;
break;
}
if (s[i - 1] == '(') {
answer += tmp;
}
v.pop_back();
tmp /= 2;
}
else if (s[i] == ']') {
if (v.empty() || v.back() != '[') {
answer = 0;
break;
}
if (s[i - 1] == '[') {
answer += tmp;
}
v.pop_back();
tmp /= 3;
}
}
if (!v.empty()) {
answer = 0;
}
cout << answer;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
cin >> s;
solution();
return 0;
}