Algorithm/Baekjoon Online Judge
백준 9012 괄호 [C++]
감성적인 개발자
2021. 8. 2. 00:55
https://www.acmicpc.net/problem/9012
9012번: 괄호
괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고
www.acmicpc.net
#include<iostream>
#include<vector>
using namespace std;
void yes_or_no(string s){
int lcnt = 0; // ( 괄호의 수
for(int i = 0; i < s.length(); i ++){
if(s[i] == '('){
lcnt++;
}
else{
lcnt--;
}
if(lcnt < 0){
// lcnt가 한 번이라도 -가 되면 ) 괄호가 엇나간 것이다.
cout << "NO" << '\n';
return;
}
}
// lcnt가 엇나가진 않았더라도 괄호의 총 개수가 다르면 NO이다.
if(lcnt == 0) cout << "YES" << '\n';
else cout << "NO" << '\n';
}
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int T; //테스트 케이스
string s; // 입력 스트링
cin >> T;
for(int i = 0; i < T; i++){
cin >> s;
yes_or_no(s);
}
}
여는 괄호 '('의 개수를 체크해가며 문제 요건을 충족하는지 확인한다.
기본적으로 여는 괄호 '(' 와 닫는괄호 ')' 의 개수가 같은지 체크하는 것은 쉬웠으나 ")("와 같은 상황에선 대처할 수 없다. 그러므로 왼쪽에서부터 괄호를 체크하는 도중 한 번이라도 닫는괄호가 더 많은 경우 "NO"를 출력하도록 했다.