본문 바로가기
알고리즘/백준

[백준 9012] 괄호 (cpp, stack)

by RoJae 2021. 12. 12.

🚀  들어가며...

  • 백준 9012번 문제 풀이다.
  • 두세번 정도 풀었는데, 이번에는 스택으로 풀었습니다.

 

🔗  문제

https://www.acmicpc.net/problem/9012

 

9012번: 괄호

괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고

www.acmicpc.net

 

📑 내용

 

1. "(" 의 경우

  • stack.push("(")

2. ")"의 경우

  • 스택을 확인하여 "("이 있으면, 통과
  • 스택에 "("이 없으면, 불가능함 (스택에 강제로 "X" push, 이후 스택이 비어질 수가 없다.)

3. 괄호쌍이 맞으면, 스택이 비어있어야 한다.

  • (stack.isEmpty())?  "YES" : "NO"

 

💌 소스코드

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

using namespace std;

int main(void){
    int n;
    cin >> n;

    while(n--){
        stack<string> st;
        string str = "";
        cin >> str;

        for(int i = 0; i < str.size(); i++){
            if(str[i] == '(')
                st.push("(");
            else{   // str[i] == ')'
                if(!st.empty() && st.top() == "("){
                    st.pop();
                }else{
                    st.push("X");       // 불능 (무조건 불가능)
                }
            }
        }

        if(st.empty())
            cout << "YES" << endl;
        else
            cout << "NO" << endl;

    }

}

 

🙋🏻‍♂️ 후기

스택을 활용한 구현이 은근 재미있는 것 같다.

PS도 자주 못하다보니, 세번째 푸는 문제..

 

 

 

댓글