[문제풀이] 백준 2504 - 괄호의 값

kodaaa·2023년 1월 5일
0

문제풀이

목록 보기
16/23
post-thumbnail

📢 문제

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

📢 알고리즘

스택, 구현

📢 풀이

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

using namespace std;

int main()
{
  string input;
  stack<int> s; //(:0, [:-1
  int result = 0;

  cin >> input;
  for (int i = 0; i < input.size(); i++)
  {
    char c = input[i];
    if (c == '(')
    {
      s.push(0);
    }
    else if (c == '[')
    {
      s.push(-1);
    }
    else if (!s.empty()) //), ]를 만나는 경우
    {
      if (c == ')' && s.top() == 0) //() -> 2로 치환
      {
        s.pop();
        s.push(2);
      }
      else if (c == ']' && s.top() == -1) //[] -> 3으로 치환
      {
        s.pop();
        s.push(3);
      }
      else //(x), [x]
      {
        int num = 0;
        while (!s.empty() && s.top() != 0 && s.top() != -1)
        {
          num += s.top();
          s.pop();
        }

        // num이 x
        if (!s.empty() && c == ')' && s.top() == 0) //(x)
        {
          s.pop();
          s.push(2 * num);
        }
        else if (!s.empty() && c == ']' && s.top() == -1) //[x]
        {
          s.pop();
          s.push(3 * num);
        }
        else
        { //괄호가 안맞는 경우
          cout << 0;
          exit(0);
        }
      }
    }
  }

  while (!s.empty())
  {
    if (s.top() == 0 || s.top() == -1) //괄호 개수가 안맞는 경우
    {
      cout << 0;
      exit(0);
    }
    result += s.top();
    s.pop();
  }
  cout << result;
}

95%에서 자꾸 실패하는데 왜 틀린걸까...? 테케 여러개 돌려봐도 다 맞게 나오는데ㅠㅠ 나중에 다시 풀어보자...

profile
취뽀하자(●'◡'●)💕

0개의 댓글