young_3060 2023. 7. 14. 15:00
728x90

 

 풀이과정 

괄호 문제는 스택의 대표적 문제이다.

  1. 짝맞추는 문제이므로 '('가 들어왔을때만 스택에 넣어준다.
  2. ')'가 들어왔을 때 스택이 비어있다면 잘못된 괄호이므로 "NO"를 출력해주고 아니라면 짝이 맞았으므로 스택을 pop해준다.
  3. 문자열 길이만큼 진행한 뒤 스택이 비어있지 않다면 짝이 안맞았음을 의미하므로 "NO"를 출력한다.
  4. 스택이 비어있다면 짝이 다 맞았다는 것을 의미하므로 "YES"를 출력한다.

 

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

void VPS(string inp) {
    stack<char> s;
    for (int i = 0; i < inp.length(); i++)
    {
        if (inp[i] == '(')
            s.push('(');
        else
        {
            if (!s.empty())
                s.pop();
            else {
                cout << "NO" << "\n";
                return;
            }
        }
    }
    if(!s.empty()) {
        cout << "NO" << "\n";
        return;
    }
    cout << "YES" << "\n";
}

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

    int N; cin >> N;
    for(int i=0; i<N; i++) {
        string inp;
        cin >> inp;
        VPS(inp);
    }
    
    return 0;
}
728x90