Programing/백준, 프로그래머스(C++)

[C++][백준 9012] 괄호

hye3193 2025. 1. 7. 17:12

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

 

제출 코드

#include <iostream>
#include <stack>
using namespace std;

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

    int n;
    cin >> n;
    for (int i = 0; i < n; i++)
    {
        stack<char> ps;
        string str;
        cin >> str;
        for (int j = 0; j < str.length(); j++)
        {
            if (ps.empty()) 
            {
                ps.push(str[j]);
                continue;
            }
            if (str[j] == '(')
                ps.push(str[j]);
            else if (str[j] == ')' && ps.top() == '(')
                ps.pop();
            else
                break;
        }
        if (ps.empty()) cout << "YES" << '\n';
        else cout << "NO" << '\n';
    }
}

vps가 될 수 없는 조건은

1. 앞에 ' ( ' 기호가 없는데 ' ) ' 기호가 나오는 경우

2. 마지막 문자까지 확인했는데 짝지어지지 않은 괄호 기호가 남아있는 경우

이므로 이번 순서의 괄호 기호가 ' ( '인 경우 그냥 push해주고, ' ) '인 경우에는 현재 top에 있는 괄호 기호가 ' ( '인지 확인해서 top을 pop 해준다

 

그리고 이번 순서의 괄호 기호가 ' ) '인데 앞에 있는 괄호 기호가 ' ( '가 아닌 경우 그냥 중간에 나가준다

 (이 경우 ps가 empty가 아니므로 자동적으로 NO를 출력)

만약 for문을 끝까지 다 돈 경우에도, 짝지어지지 않은 ' ( ' 기호가 남아있을 수 있기 때문에 empty 여부를 체크해주고 YES/NO를 출력해주었다