티스토리 뷰

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"를 출력하도록 했다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
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
글 보관함