문제
풀이
스택을 이용한 문제이다. ‘(‘가 나왔을 때는 다른 벡터에 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");
}
}
}
}