알고리즘/문제 풀이

백준 9012 - 괄호

qqlzzb 2022. 2. 16. 22:13

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

 

9012번: 괄호

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

www.acmicpc.net

풀이

입력받은 문자열을 돌다가

1) 여는 괄호를 만나면 stack에 push한다. 

2) stack이 비어있지 않은 상태에서 닫는 괄호를 만나면 pop 한다.

3) stack이 비어있는 상태에서 닫는 괄호를 만나면 false

 

입력받은 문자열을 다 돈 후에도 false 가 되지 않고 stack이 비어있다면 true를 반환한다.

 

코드

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

bool vps(string ps)
{
    stack<char> s;
    bool flag = true;
    for(int i=0; i<ps.length(); i++)
    {
        if(ps[i]=='(')
        {
            s.push(ps[i]);
        }
        else if(!s.empty() && ps[i]==')')
        {
            s.pop();
        }
        else if(s.empty() && ps[i] ==')')
        {
            flag = false;
            break;
        }
    }
    if(flag && s.empty()) return true;
    else return false;
}

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

    for(int i=0; i<n; i++)
    {
        cin>>str;
        if(vps(str)) cout<<"YES"<<'\n';
        else cout<<"NO"<<'\n';
    }    
}

'알고리즘 > 문제 풀이' 카테고리의 다른 글

백준 1065 - 한수  (0) 2022.03.19
백준 1158 - 요세푸스 문제(C++)  (0) 2022.03.12
백준 4949 - 균형잡힌 세상  (0) 2022.03.03
백준 10816 - 숫자 카드 2  (0) 2022.02.23
백준 1920 - 수 찾기  (0) 2022.02.19