본문 바로가기
프로그래밍/알고리즘

[백준] 9012번 괄호

by 슈퍼닷 2019. 12. 21.
반응형

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

 

9012번: 괄호

문제 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 부른다. 한 쌍의 괄호 기호로 된 “( )” 문자열은 기본 VPS 이라고 부른다. 만일 x 가 VPS 라면 이것을 하나의 괄호에 넣은 새로운 문자열 “(x)”도 VPS 가 된다. 그리고 두 VPS x 와 y를 접합(conc

www.acmicpc.net

 

예전에 후위표기법을 이용해서 수식을 입력받는 프로그램을 만들었던게 생각나서 금방풀은문제.

단순히 stack에 (를 쌓는다.

)가 나왔을때 stack이 비었으면 NO , break; 하고 아니라면 pop()한다.

루프가 끝나고 stack이 비어있지않다면 NO 아니면 YES다. ( 짝이 맞았다면 다 pop됬을 것이므로)

 

코드는 다음과같다

#include <iostream>
#include <algorithm>
#include <stack>
#include <string>
#include <map>

int main(void){
    std::ios_base::sync_with_stdio(false);
    //std::cin.tie(NULL);
    
    int N = 0;
    std::cin >> N;
    
    for(int i=0; i<N; ++i){
        std::string input;
        std::cin >> input;
        
        std::stack<char> ptStack;
        std::string str = "YES";
        for(int i=0; i<input.length(); ++i){
            if(input[i] == '('){
                ptStack.push('(');
            }else{
                if(ptStack.empty()){
                    str = "NO";
                    break;
                }
                ptStack.pop();
            }
        }
        
        if(!ptStack.empty()){
            std::cout << "NO" << "\n";
        }else{
            std::cout << str << "\n";
        }
    }
    
    return 0;
}
반응형

댓글