주어진 괄호 문자열이 올바른 괄호 문자열 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 반환.
'알고리즘' 카테고리의 다른 글
[python] 백준 11279번 - 최대 힙 (0) | 2024.08.11 |
---|---|
[python] 백준 1629번 - 곱셈 (0) | 2024.08.05 |
[python] 백준 16564번 - 히오스 프로게이머 (0) | 2024.07.20 |
[python] 백준 2805번 - 나무 자르기 (0) | 2024.07.16 |
[python] 백준 1914번 - 하노이 탑 (0) | 2024.07.13 |