본문 바로가기
알고리즘 문제풀이

백준 9012번 괄호 C++/문자열/실버5

by yoogani 2023. 10. 23.

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

 

9012번: 괄호

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

www.acmicpc.net

 

문자열 문제

 

괄호를 받아서 

( 인 경우에는 스택에 넣고

) 인 경우에는 스택에서 뺀다.

 

그 런 데

스택이 빈 상태에서 ) 가 오면

빈 스택에서 뺄 것이 없으므로 이 경우 바로  NO ! 다

 

왜냐면 ) 부터오면 괄호가 닫힐 가능성이 아예 없기 때문이다.

 

다 받고나서 스택이 빈 경우면서 플래그가 true 그대로면 -> yes 

아니면 NO 출력

 

#include <iostream>
#include <vector>
#include <stack>
#include <algorithm>

using namespace std;

int main(int argc, const char * argv[]) {
    
    ios_base::sync_with_stdio(false);
    

    int test;
    // test case
    cin>>test;
    
    for(int t=0; t<test; t++){
        
        bool flag=true;
        string str;
        stack<int> s;
        
        cin>>str;
        
        for(int i=0;i<str.size();i++){
            if(str[i] =='(')
                s.push(0);
            else if(str[i] == ')') {
                if(s.empty()){
                    flag = false;
                    break;
                }else s.pop();
            }
        }
        
        if(s.empty() && flag) cout<<"YES"<<'\n';
        else cout<<"NO"<<'\n';
        
    }
    
    return 0;
}