백준 algorithm

백준 9012 - 괄호

cosmohoo 2020. 2. 21. 00:55
반응형

문제 설명

 

=>stack을 이용해 '('를 만나는 경우 push를 하고 ')'를 만나는 경우 pop을 하였다. 

=>괄호가 끝날 때 까지 해당 작업을 다 한 이후에 stack이 비어있으면 완전한 괄호(YES)이고, stack이 비어있지 않으면 불완전한 괄호(NO)이다.

=>함수를 사용하여 true와 false값을 반환한다면 더 간단하게 풀 수 있다. 

=>본인은 함수를 생성하지 않고 하였다. 

=>stack이 비어있을 때 ')'를 만나는 경우 '('를 push하여 stack이 비지 않도록하여 예외처리를 하였다. 

 

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

using namespace std;

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    
    int N;
    cin >> N;
    
    cin.clear();
    cin.ignore(256, '\n');
    
    string S;
    for(int i=0; i<N; ++i)
    {
        getline(cin, S);
        S+='\n';
        int x=0;
        
        stack<char> st;
        while(S[x]!='\n')
        {
            if(S[x]=='(')
            {
                
                st.push(S[x]);
            }
            else
            {
                if(st.empty())
                {
                    st.push(')');
                    break;
                }
                else
                    st.pop();
            }
            ++x;
        }
        if(st.empty())cout<<"YES"<<'\n';
        else cout<<"NO"<<'\n';
        
        S.clear();
    }
    return 0;
}
반응형