728x90
문제
https://www.acmicpc.net/problem/9012
문자열은 너무 어려운 것 같다.
일단 스택을 사용하여 입력받은 문자들을 스택에 다 넣고 top을 하면서 하나씩 꺼냈다.
만약 ')' 문자가 먼저 오지 않고 '('가 먼저 온다면 NO를 출력 '('와 ')'의 개수가 틀리면 틀리므로 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
|
#include <iostream>
#include <stack>
#include <string>
using namespace std;
int main(void){
int T;
string s;
cin >> T;
stack <char> st;
for(int i = 0;i<T;i++){
cin >> s;
for(int j =0;j<s.size();j++){st.push(s[j]);}
int ri = 0,ck = 0,temp = st.size();
for(int j = 0;j<temp;j++){
if(st.top() == ')'){
st.pop();
ri++;
}
else{
st.pop();
ri--;
}
if(ri<0){cout << "NO\n";ck = 1;break;}
}
if(ck != 1){
if(ri != 0){cout <<"NO\n";}
else{cout << "YES\n";}
}
while(!st.empty()){st.pop();}
}
}
|
cs |
728x90