본문 바로가기
알고리즘

[python] 백준 9012번 - 괄호

by 이재현9999 2024. 7. 22.

주어진 괄호 문자열이 올바른 괄호 문자열 VPS인지 아닌지 판단하는 문제.

 

스택이 어떤식으로 활용 되는지 감이 잡히는? 문제인 것 같다.

import sys
input = sys.stdin.readline

def isVPS(s):
    stack = []
    for i in s:
        if i == "(":
            stack.append(i)
        elif i == ")":
            if len(stack) == 0:
                return False
            else: 
                del(stack[-1])
    if len(stack) == 0:
        return True
    else: 
        return False
    
T = int(input())

for _ in range(T):
    s = input()
    if isVPS(s):
        print("YES")
    else:
        print("NO")

입력 받은 괄호 문자열을 for문을 통해서 하나씩 확인한다.

 

만약 "("이면 스택에 요소를 추가한다.

")"이면 일단 스택이 비어있는지 아닌지 확인한다.

비어있지 않다면 "("들이 있다는 뜻이고, pop을 해준다.

만약 비어있다면 이때까지 스택에 넣은 "("보다 ")"의 개수가 더 많다는 뜻이므로 VPS가 아니다.

따라서 False 반환.

 

위의 과정을 다 올바르게 수행되었다면 스택의 길이가 0일 것이고,

0이면 True 반환. 아니면 False 반환.