본문 바로가기

코딩테스트 연습/Baekjoon

[Baekjoon] 9012번: 괄호 (c++)

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

 

9012번: 괄호

괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고

www.acmicpc.net

마지막에 스택 st가 비어있으면 YES출력, 비어있지 않으면 NO를 출력함

  1. 괄호 짝이 () 이루어져야 하므로 처음부터 )가 나오면 스택에 )를 push 후 break 해서 NO 출력
  2. ( 일때 스택에 (를 push
  3. )일때 스택이 비어있지 않거나 top이 (일때는 스택의 top에있는 값을 pop함. 나머지 경우는 )를 push함

코드

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

using namespace std;

int main()
{
    int test;
    int flag = 0;
    string input;

    cin >> test;
    cin.ignore();
    for (int t = 0; t < test; t++)
    {
        stack<char> st;
        cin >> input;
        int size = input.size();
        for (int i = 0; i < input.length(); i++)
        {
            if (input[0] == ')') //처음부터 ) 나오면 NO
            {
                st.push(')');
                break;
            }

            if (input[i] == '(')
                st.push('(');
            else //)
            {
                if (!st.empty() && st.top() != ')')
                    st.pop();
                else
                    st.push(')');
            }
        }

        if (st.empty() == 1)
        {
            cout << "YES" << endl;
        }
        else
        {
            cout << "NO" << endl;
        }
    }

    return 0;
}