article thumbnail image
Published 2023. 1. 20. 16:43

문제 설명

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

 

9012번: 괄호

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

www.acmicpc.net

주어진 괄호 문자열이 한 쌍의 괄호 기호로 된 "()"인지 아닌지 구하기

 

문제 풀이법

stack을 사용하면 된다

 

올바른 한쌍의 괄호기호인지 구별하기 위해 flag 사용

  • '('가 들어왔을 때 : stack에 push
  • ')'가 들어왔을 때
    • 만약 stack이 비어있다면? : flag를 false로 변경
    • 만약 stack이 비어있지 않고, stack의 top이 '('이면 pop
    • 만약 stack이 비어있지 않고, stack의 top이 '('가 아니면 flag를 false로 변경

 

이후 stack이 비어있지 않다면 flag를 false로 변경

 

  • flag가 false이면 NO 출력
  • flag가 true이면 YES 출력

 

소스 코드

#include <iostream>
#include <stack>

using namespace std;

int main()
{
    int n;
    cin >> n;
    
    while (n > 0)
    {
        string str;
        stack<char> s;
        
        cin >> str;
        
        bool flag = true;
        for (int i = 0; i < str.size(); i++)
        {
            if (str[i] == '(')
                s.push('(');
           
            else if (str[i] == ')')
            {
                if (s.empty())
                {
                    flag = false;
                    break;
                }
                else
                {
                    if (s.top() == '(')
                        s.pop();
                    else
                        s.push(')');
                }
            }
        }
        
        if (!s.empty())
            flag = false;
         
        if (flag == false)
            printf("NO\n");
        else
            printf("YES\n");
        
        
        n--;
    }
    

    return 0;
}

'Algorithm Study' 카테고리의 다른 글

[백준] 10799 쇠막대기  (0) 2023.03.01
[프로그래머스] 1단계 - 푸드 파이트 대회  (0) 2023.02.05
[백준] 3986 좋은 단어  (0) 2023.01.19
[백준] 4949 균형잡힌 세상  (0) 2023.01.19
[백준] 5430 AC  (0) 2023.01.18
복사했습니다!