BOJ [C++]) 9012번 괄호
https://www.acmicpc.net/problem/9012
9012번: 괄호
괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고
www.acmicpc.net
1. 문제
괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 부른다. 한 쌍의 괄호 기호로 된 “( )” 문자열은 기본 VPS 이라고 부른다. 만일 x 가 VPS 라면 이것을 하나의 괄호에 넣은 새로운 문자열 “(x)”도 VPS 가 된다. 그리고 두 VPS x 와 y를 접합(concatenation)시킨 새로운 문자열 xy도 VPS 가 된다. 예를 들어 “(())()”와 “((()))” 는 VPS 이지만 “(()(”, “(())()))” , 그리고 “(()” 는 모두 VPS 가 아닌 문자열이다.
여러분은 입력으로 주어진 괄호 문자열이 VPS 인지 아닌지를 판단해서 그 결과를 YES 와 NO 로 나타내어야 한다.
2. PS
- VPS가 되는 조건을 생각해야 하는 문제
- '(' 를 +1, ')'를 -1을 하여 합이 0이 되고, -1이 될 시 무조건 VPS가 성립되지 않으므로 싸이클 중지
- 싸이클마다 배열과 문자열을 초기화 해줌.
- 다음에 다른방법을 이용하여 다시 풀어봐야겠다..
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
using namespace std;
int main() {
int n;
string s;
vector<char> str;
cin >> n;
for(int i = 0 ; i < n ; i++) {
cin >> s;
int sum = 0;
bool vps = false;
for(char c : s) {
str.push_back(c);
if(c == '(') sum++;
else if(c ==')') {
sum--;
if(sum < 0) {
break;
}
}
}
if(sum == 0) vps = true;
else vps = false;
if(vps) cout << "YES";
else cout << "NO";
cout << endl;
str.clear();
s.clear();
}
}