문제 링크: https://www.acmicpc.net/problem/9012


스택을 활용하여 풀었습니다.


'('를 만나면 모두 스택에 넣고, ')'를 만나면 스택에서 원소를 꺼냅니다.

스택이 비어있을 때 ')'를 만나면 옳은 괄호 문자열이 아니므로, 바로 false를 리턴합니다.

문자열이 끝났을 때, 스택이 비어있지 않고 '("가 남아있다면 역시 올바르지 않은 문자열이므로 false를 리턴합니다.


C++

#include <iostream>
#include <stack>
#include <string>
using namespace std;

bool vpsCheck(string);

int main() {
    int count = 0;
    string str;
    cin >> count;

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

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

    return 0;
}

bool vpsCheck(string str) {
    stack cStack;
    int len = (int)str.length();

    for(int i = 0; i < len; i++) {
        char c = str[i];

        if(c == '(') cStack.push(c);
        else {
            if(!cStack.empty()) cStack.pop();
            else return false;
        }
    }

    return cStack.empty();
}

'Algorithm > BOJ' 카테고리의 다른 글

BOJ 2493번: 탑  (0) 2018.10.03
BOJ 9935번: 문자열 폭발  (0) 2018.10.03
BOJ 10799번: 쇠막대기  (0) 2018.10.03
BOJ 1001번: A-B  (0) 2018.10.03
BOJ 1000번: A+B  (0) 2018.10.03

+ Recent posts