[C++][백준 2504] 괄호의 값

PublicMinsu·2025년 8월 10일

문제

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

접근 방법

괄호가 올바른지는 스택을 활용합니다.
여는 괄호가 하나씩 나올 때마다 스택에 넣고 닫는 괄호가 나올 때마다 스택에서 빼서 여는 괄호의 짝이 맞는지 확인해 주면 됩니다.

코드

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

int solve()
{
    string str;
    stack<char> st;
    int sum = 0, value = 1;

    ios::sync_with_stdio(0), cin.tie(0);
    cin >> str;

    for (int i = 0; i < str.size(); ++i)
    {
        const char &c = str[i];

        switch (c)
        {
        case '(':
            st.push(c);
            value *= 2;
            break;
        case '[':
            st.push(c);
            value *= 3;
            break;
        case ')':
            if (st.empty() || st.top() != '(')
            {
                return 0;
            }
            else if (str[i - 1] == '(')
            {
                sum += value;
                value /= 2;
                st.pop();
            }
            else
            {
                value /= 2;
                st.pop();
            }
            break;
        case ']':
            if (st.empty() || st.top() != '[')
            {
                return 0;
            }
            else if (str[i - 1] == '[')
            {
                sum += value;
                value /= 3;
                st.pop();
            }
            else
            {
                value /= 3;
                st.pop();
            }
            break;
        }
    }

    if (!st.empty())
    {
        return 0;
    }

    return sum;
}

int main()
{
    cout << solve();
    return 0;
}

풀이

스택, 이전 인덱스에 해당하는 값을 활용하여 계산해 주면 됩니다.
이전 인덱스에 해당하는 값이 짝이 맞으면 더하고 아니면 더하지 않는다는 것을 깨닫는 것이 중요합니다.

profile
연락 : publicminsu@naver.com

0개의 댓글