BOJ : 2504 괄호의 값 (C++)

김정욱·2020년 10월 23일
0

Algorithm - 문제

목록 보기
20/249

문제

Code

#include <iostream>
#include <stack>

using namespace std;

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);

    stack<int> s;
    string str;
    int cur_val = 1, tot_val = 0;

    cin >> str;

    for(int i=0;i<str.length();i++)
    {
        char a = str[i];
        if(a == '(' || a == '[')
        {
            int mul = a == '(' ? 2 : 3;
            cur_val *= mul;
            s.push(a);
        }else if(a == ')' || a == ']')
        {
            if(s.empty())
            {
                cout << 0;
                return 0;
            }
            if(str[i-1] != ')' && str[i-1] != ']')
            {
                tot_val += cur_val;
            }
            int mul = a == ')' ? 2 : 3;
            cur_val /= mul;
            if((a == ')' && s.top() != '(') || (a == ']' && s.top() != '['))
            {
                cout << 0;
                return 0;
            }
            s.pop();
        }
    }
    if(s.empty())
        cout << tot_val;
    else
        cout << 0;
}
  • 입력이 올바르지 못한 괄호열은 stack을 사용해서 판별했음
    1) ')' 일 때 s.top()이 '(' 아니면 false;
    2) ']' 일 때 s.top()이 '[' 아니면 false;
    3) 닫는 괄호 ')' 또는 ']'가 들어왔을 때 stack.empty() 이면 false;
profile
Developer & PhotoGrapher

0개의 댓글