백준 2504 괄호의 값 (C++)

안유태·2023년 7월 3일
0

알고리즘

목록 보기
102/239

2504번: 괄호의 값

간단한 구현 문제이다. 반복문을 통해 문자열을 차례대로 접근하면서 (이거나 [일 경우 스택에 넣어주고 해당하는 괄호의 값을 곱해주었다. 그리고 )이나 ]일 경우 먼저 올바른 괄호인지 확인을 한 후 바로 이전이 여는 괄호였다면 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;
}
profile
공부하는 개발자

0개의 댓글