본문 바로가기

알고리즘 Algorithm/백준 (BaekJoon)

백준 9012 : 괄호 [C++]

문제


문제에 대한 링크는 여기를 클릭해주세요.

문제 설명


괄호 문자열(PS)은 '('와 ')'로만 이루어진 문자열이고, 그 중에서 올바른 괄호 문자열(VPS)은 '('와 ')'가 한 쌍을 이룬 괄호 문자열입니다. 올바른 괄호 문자열이면 "YES"를 아니면 "NO"를 출력해야 합니다.

풀이


스택(stack)을 활용하기로 했습니다. '('는 push를 하고 ')'를 만날 시 pop을 합니다. '('와 ')'는 한 쌍을 이루니 올바른 괄호 문자열(VPS)이면 스택은 비어있어야 합니다.

소스 코드


#include <iostream>
#include <string>
#include <stack>

using namespace std;

bool check(const string &str);

int main()
{
    int T;
    cin >> T;
    string str;

    for (int i = 0; i < T; i++)
    {
        cin >> str;

        if(check(str))
            cout << "YES" << endl;
        else
            cout << "NO" << endl;
    }

    return 0;
}

bool check(const string &str)
{
    stack<char> s;
    int len = str.length();

    for (int i = 0; i < len; i++)
    {
        if(str[i] == '(')
            s.push(str[i]);
        else
        {
            if(s.empty())
                return false;
            s.pop();
        }
    }

    return s.empty();
}

주의 사항


empty메서드로 체크를 하고 pop을 진행해야합니다. 체크를 안할 시 진행이 안되고 종료가 되는 오류가 발생합니다.