본문 바로가기
알고리즘

[C++] 백준 10799: 괄호 S 4

by 휘성티비 2025. 11. 17.

 


내가 해결한 방식은 스택 자료구조를 사용하여 열린괄호 "("를 만나면 넣고, 닫힌 괄호 ")"를 만날 때 조건을 만들어서 해결하였다.

#include <iostream>
#include <stack>

using namespace std;

int main() {
    int T;
    cin >> T;
    
    while(T--) {
        string str;
        stack<char> S;
        bool er = false;
        cin >> str;
        
        for(auto e: str) {
            if(e=='(') {
                S.push(e);
            }
            else if(e==')') {
                if(S.empty()) er = true;
                else S.pop();
            }
        }
        if(!S.empty() || er) cout << "NO" << endl;
        else cout << "YES" << endl;
        
    }
    return 0;
    
}

테스트 케이스 T번 동안 돌면서 한번에 한번씩 스택을 돌릴 것이다.

열린 괄호 "("면 무조건 넣고, 닫힌 괄호 ")"면 혹시나 스택이 비어있으면 닫힌 괄호 ")"가 첫번째라 무조건 VPS가 성립되지 않으니 아무런 조치를 하지 않고 er 변수를 true로 바꾼다.

만약 스택이 비어있지 않다면 열린 괄호와 매칭이 되지 VPS가 성립되기에 POP을 해준다.(열린거 닫힌거 짝 세는거보다 짝 맞을 때 지워버리는게 빠름)

 

마지막에 스택이 비어있거나 er 이 트루라면 짝이 안맞거나 닫힌 괄호로 시작한다는 뜻이다 NO를 출력한다.

'알고리즘' 카테고리의 다른 글

백준 3015번: 오아시스 재결합 C++ 문제 해결  (1) 2024.11.24
선택 정렬  (0) 2024.02.18
버블 정렬  (0) 2024.02.18
삽입 정  (0) 2024.02.18
퀵 정렬  (0) 2024.02.18