https://www.acmicpc.net/problem/9012
<요약>
괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 한 쌍의 괄호 기호로 된 “( )” 문자열은 기본 VPS(Valid PS, VPS) 이라고 부른다.
예를 들어 “(())()”와 “((()))” 는 VPS 이지만 “(()(”, “(())()))” , 그리고 “(()” 는 모두 VPS 가 아닌 문자열이다.
여러분은 입력으로 주어진 괄호 문자열이 VPS 인지 아닌지를 판단해서 그 결과를 YES 와 NO 로 나타내어야 한다.
stack<int> s;
입력 받은 문자열을 str이라고 한다면 for문을 이용해서 str의 문자길이만큼 str의 문자 하나하나를 비교함
str[i]가 ' ( ' 문자라면 push하고, ' ) ' 문자라면 if문을 통해 그 stack이 비어있는지 확인
-> 비어있다면 '(' 문자가 없다는 뜻이므로 false를 반환하는 식으로 VPS비교
#include <iostream>
#include <stack>
using namespace std;
bool VPS(string ps) {
stack<int> stack;
for (int i = 0; i < ps.size(); i++) {
if (ps[i] == '(') {
stack.push('(');
}
else if (ps[i] == ')') {
if (stack.empty()) return false;
else stack.pop();
}
}
if (stack.empty()) return true;
else return false;
}
int main(void) {
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int n;
cin >> n;
string ps, result;
for (int i = 0; i < n; i++) {
cin >> ps;
result = VPS(ps) ? "YES" : "NO";
cout << result << "\n";
}
return 0;
}