BOJ/C++

BOJ [C++]) 9012번 괄호

도리닥닥 2021. 12. 20. 03:32
728x90

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();
    }
}