#include<bits/stdc++.h>
using namespace std;
string s;
stack<char> stk;
int sum; int k=1;
int flag;
int main() {
cin >> s;
for (int i = 0; i < s.size(); i++) {
if (s[i] == '(') { // 첫 번째 경우
k *= 2;
stk.push(s[i]);
}
else if (s[i] == '[') { // 두 번째 경우
k *= 3;
stk.push(s[i]);
}
else if (s[i] == ']') { // 세 번째 경우
if (stk.empty()) {
cout << 0 << '\n';
return 0;
}
if (s[i - 1] == '[') sum += k;
k /= 3;
if(stk.top()=='[')
stk.pop();
}
else { //s[i]==')' 네 번째 경우
if (stk.empty()) {
cout << 0 << '\n';
return 0;
}
if (s[i - 1] == '(') sum += k;
k /= 2;
if(stk.top()=='(')
stk.pop();
}
}
if (stk.empty()) {
cout << sum << '\n';
}
else {
cout << 0 << '\n';
}
}
처음에 어떻게 문제를 풀지 방향을 잡고, 경우의 수를 나눠서 풀면 된다.