백준 2504 괄호의 값

JunSeok·2023년 2월 2일
0

백준

목록 보기
10/40

2일 동안 생각해봤지만 풀지 못했다.
어떻게 해야할 지는 알겠으나 구현 능력이 미달이었다.

정답코드를 보고 놀라웠다.
분명 어려운 코드는 아닌데 막상 내가 생각해내긴 어려운 코드이다.

구현능력을 키우는 방법은 계속해서 문제를 풀어보는 것이라 했다.
그리고 풀지 못한 문제는 정답코드를 보되, 익숙해져야 한다.
풀지 못했다고 자책하지 말자.
꾸준히만 하자

#include <bits/stdc++.h>
using namespace std;

stack<char> s;
string str;

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

    cin >> str;
    int sum = 0; // 누적해서 더해질 값
    int num = 1; // 곱해질 값

    for(int i = 0; i < str.size(); i++){
        if(str[i] == '(') {
            num *= 2;
            s.push(str[i]);
        }
        else if(str[i] == '[') {
            num *= 3;
            s.push(str[i]);
        }
        else if(str[i] == ')') {
            if(s.empty() || s.top() != '(') {
                cout << 0;
                return 0;
            }
            if(str[i-1] == '(') sum += num;
            s.pop();
            num /= 2;
        }
        else {
            if(s.empty() || s.top() != '[') {
                cout << 0;
                return 0;
            }
            if(str[i-1] == '[') sum += num;
            s.pop();
            num /= 3;
        }
    }
    if(s.empty()) cout << sum;
    else cout << 0;
}
profile
최선을 다한다는 것은 할 수 있는 한 가장 핵심을 향한다는 것

0개의 댓글