백준

백준 9012번 c++

solfa 2023. 6. 25. 03:45

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

 

9012번: 괄호

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

www.acmicpc.net

stack을 활용하는 문제

#include <iostream>
#include <stack>
using namespace std;
stack <char> s;

int main()
{
    int n;
    string a;
    cin>>n;

    for(int i=0 ; i<n ; i++)
    {
        cin>>a;
        for(int j = 0 ; j<a.length() ; j++){
            if(a[j]=='(')
                s.push('(');
            else if (a[j]==')')
                if(!s.empty() && s.top()=='(')
                    s.pop();
                else
                    s.push(')');
        }

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

        while(!s.empty())
            s.pop();
    }
}

5달전에 풀다가 묵혀놨는데 지금이 더 못하는 듯;;; ㅠㅠㅠㅠ

 

1차 사고

stack을 활용한다는 건 알고 있어서 무작정 모든 문자열을 stack에 push한 다음 pop을 하면서 짝을 맞추려고 했음

근데 이게 막상 해보려니까 생각보다 까다로움

 

2차 사고 

'(' 이거면 stack에 push ')' 이거면 pop 해서 최종적으로 stack이 비었으면 yes, 아니면 no 출력!

 

 

주의할 점

[1] ')' 이게 왔을 때

앞에가 '(' 이거일 때만 pop을 해야함

for문이 0부터 시작하도록 설정했기 때문에 i-1을 할 때 0이 되면 안 됨 = stack안에 적어도 뭐 하나가 있을 때 pop을 해야함

아니면 push!!

 

[2] stack 초기화 해주기

새로운 string을 받기 전에 stack 초기화를 해줘야함!

stack이 빌 때 까지 pop을 해주면 됨

728x90

'백준' 카테고리의 다른 글

백준 1260번 C++ 배열 사용  (0) 2023.07.06
백준 4949번 c++  (0) 2023.07.06
백준 1935번 C++ 배열 사용  (0) 2023.07.06
백준 2164 c++  (0) 2023.01.17
백준 10773번 C++  (1) 2023.01.17