[BOJ] 9012번 괄호 - C++

"스택"

Posted by Yongmin on June 19, 2021

문제

괄호

풀이

스택을 이용한 문제이다. ‘(‘가 나왔을 때는 다른 벡터에 push를 해주고, ‘)’가 나왔을 때는 ‘(‘가 담겨져 있던 벡터에 pop을 해주어서 그 괄호가 닫혔다는 것을 의미하게 해주는 것이다. 이 때, ‘)’ 가 나왔을 때는 벡터가 empty상태라면 곧 바로 NO를 출력해주고, 끝까지 도달했을 때, 벡터 안에 원소 ()가 모두 닫혀 empty 상태라면 YES, empty 상태가 아니라 남아 있는 ‘(‘가 있다면 NO를 출력하게 하면 된다.

소스 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
#include <string>
#include <vector>
using namespace std;

int main(){
    int N;
    scanf("%d", &N);
    
    for(int i = 0; i<N; i++){
        vector<char> check;
        string temp;
        cin >> temp;
        
        for(int j = 0; j<temp.size(); j++){
            if(temp[j] == '('){
                check.push_back('(');
            }
            else if(temp[j] == ')'){
                if(check.size() == 0){
                    printf("NO\n");
                    break;
                }
                else check.pop_back();
            }
            
            if(j==temp.size()-1){
                if(check.size() == 0){
                    printf("YES\n");
                }
                else printf("NO\n");
            }
        }
    }
}


# # #