PS/백준 알고리즘[BOJ]

[백준 2504번] 괄호의 값 (C++)

BE_개발자 2023. 12. 21. 13:44
728x90
반응형

stack의 이용한 괄호쌍의 유효성 검사 문제이다. 하지만 이 문제는 값이 존재하여 연산이 추가되었다.

먼저, 괄호가 닫힐 때마다 곱해진 값을 더해주고 갱신하면서 계산하려고 했으나 앞의 값들이 다 날아가는 문제가 생겼다.

다른 방법을 다른 블로그들을 참고하다 괄호가 열릴 때 미리 계산해야 한다는 사실을 깨달았고 이 과정에서 분배법칙을 이용하였다.  

#include<iostream>
#include<stack>
#include<string>

using namespace std;
string str;
int temp, ans;
stack<char> bracket;
char pre;

int main(void){
    cin.tie(0);
    cout.tie(0);
    ios_base::sync_with_stdio(0);
    
    temp = 1;
    cin >> str;

    for(auto e : str){
        
        if(e == '(' || e == '[') {
            bracket.push(e);
            if(e == '(') temp *= 2;
            else temp *= 3;
            pre = e;
            continue;
        }
        if(bracket.empty()) {
            ans = 0;
            break;
        }
        if(e == ')' && bracket.top() == '(') {
            if(pre == '(') ans += temp;
            temp /= 2;
            bracket.pop();
            pre = e;
        }
        else if(e == ']' && bracket.top() == '[') {
            if(pre == '[') ans += temp;
            temp /= 3; 
            bracket.pop();
            pre = e;
        }
        else{
            ans = 0;
            break;
        }
    }
    if(bracket.empty()) cout << ans;
    else cout << 0;
    return 0;

}
728x90
반응형