# 1218. 괄호 짝짓기
from collections import deque
# 괄호가 유효한지 판별하는 함수
def valid(n, sq):
# 스택 선언
s = []
# 괄호를 처리합니다.
for cur in sq:
# 스택이 비어있으면 Push합니다.
if not s:
s.append(cur)
# 스택이 비어있지 않을 때
else:
# 가장 최신 괄호
bf = s[-1]
if bf == '(':
if cur == ')':
s.pop()
else:
s.append(cur)
elif bf == '[':
if cur == ']':
s.pop()
else:
s.append(cur)
elif bf == '{':
if cur == '}':
s.pop()
else:
s.append(cur)
elif bf == '<':
if cur == '>':
s.pop()
else:
s.append(cur)
# 결과 출력
if s:
print("#{} {}".format(n, 0))
else:
print("#{} {}".format(n, 1))
# 10개의 테스트케이스가 주어진다.
for t in range(1, 10+1):
# 길이가 주어진다.
l = int(input())
# 문자열이 주어진다.
seq = list(input().rstrip())
# 함수 실행
valid(t, seq)
Stack 개념 적용, Stack에서 가장 최신 괄호가 현재 들어오는 괄호와 쌍을 이루는지 확인, 쌍을 이루면 Stack에서 최신 괄호를 제거한다. 쌍을 이루지 않으면 Stack에 추가한다. 마지막에 Stack이 비어있으면 모든 괄호가 쌍을 이룬다.