Algorithm/Stack & Queue

[백준] 9012번 괄호 (Python 파이썬)

안드선생 2021. 4. 12. 23:14
반응형

www.acmicpc.net/problem/9012

 

9012번: 괄호

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

www.acmicpc.net

문제 설명

"( ( ) ) " or "( )( )" 등 괄호가 정상적으로 닫혔을 경우에는 YES 를 출력하고

"( ( ) ( " or "( ( ) " 등 괄호가 정상적으로 닫히지 않았을 경우에는 NO를 출력하는 문제이다.


풀이 과정

스택의 pop을 이용하기 때문에 가장 처음에는 " ) " 가 나와야 한다.

그리고 " ) " 를 꺼내지 않았는데 " ( " 가 나오는 경우도 정상적인 괄호가 아니다. ex)  " ()( " 

 

스택의 뒤에서 하나씩 괄호를 꺼내게 되는데 " ) " 를 만나면 count를 +1 해주고

" ( " 를 만나면 count를 -1 해준다.

이 때, count가 0이라는 것은 닫힌 괄호가 준비되지 않았다는 뜻이므로 NO를 출력해준다.

마지막에, 모든 괄호를 빼왔을 때도, count가 0이 아니라는 것은 짝이 맞지 않는다는 뜻이므로 NO를 출력한다.

import sys
t = int(input())
for i in range(t):
    count = 0
    stack = list(sys.stdin.readline().strip())
    flag = 0
    while len(stack) > 0:
        bracket = stack.pop()
        if bracket == ")":
            count += 1
        elif bracket == "(":
            if count == 0:
                print("NO")
                flag = 1
                break
            count -= 1
    if flag == 0:
        if count == 0:
            print("YES")
        else:
            print("NO")

 

https://github.com/HongEunho

전체 문제 & 코드는 위의 깃에 정리되어 있습니다.

팔로우 & 맞팔은 환영입니다 !

 

반응형