온라인저지

[BOJ] 2504번: 괄호의 값

plzfday 2018. 7. 27. 02:09

https://www.acmicpc.net/problem/2504

나는 이런 문제가 나올 때마다 내 코딩 실력에 너무 자괴감이 든다... 열심히 해야지...

그 간단한 temp 변수 하나를 생각 못해서 뻘짓을 하고 있었다니!!! 말 그대로 tmp는 괄호가 닫힐 때까지 임시로 값을 저장해 주는 변수다.

#include <cstdio>
#include <stack>
using namespace std;

char s[31];
int val, tmp = 1;
stack<char> stk;

int main()
{
    scanf("%s", s);
    for (int i = 0; s[i]; ++i)
    {
        switch (s[i])
        {
        case '(':
            tmp *= 2;
            stk.push('(');
            break;
        case ')':
            if (stk.empty())
                return !printf("0");
            if (s[i - 1] == '(')
                val += tmp;
            if (stk.top() == '(')
                stk.pop();
            tmp /= 2;
            break;
        case '[':
            tmp *= 3;
            stk.push('[');
            break;
        case ']':
            if (stk.empty())
                return !printf("0");
            if (s[i - 1] == '[')
                val += tmp;
            if (stk.top() == '[')
                stk.pop();
            tmp /= 3;
            break;
        }
    }
    printf("%d\n", !stk.empty() ? 0 : val);
    return 0;
}