https://www.acmicpc.net/problem/4949
[풀이]
import sys
from collections import deque
while True:
data = input()
cnt = 0
if data == '.':
break
stack = deque()
for i in data:
if i in ['(', '[']:
stack.append(i)
if i in [')', ']']:
cnt += 1
if len(stack) != 0:
if i == ')' and stack[-1] == '(':
stack.pop()
cnt -= 1
elif i == ']' and stack[-1] == '[':
stack.pop()
cnt -= 1
if cnt == 0 and len(stack) == 0:
print('yes')
else:
print('no')
- '(', '[' 의 여는 기호를 만났을 때는 stack에 삽입한다.
- 만약 닫는 기호를 만났을 때는 cnt를 증가시키고
- 로직에 따라 닫는 기호를 만났고, stack의 마지막에 매칭되는 여는 기호가 있다면 stack의 맨뒤에서 제거하고, cnt를 감소시킨다.
- 최종적으로 cnt가 0 (닫는기호가 모두 짝을 이뤄 없어졌을때)이며, stack에 아무 것도 없다면 'yes'를 출력
- 아니면 'no'
[풀이 후기]
stack, queue 쪽은 개념이 어느 정도 잡혀서 이제 혼자서 생각해보면서 풀 수 있다. 다만 문제를 쉽게 풀려고하지말고, 어떤 방법을 쓰던 해결해보려고 할 것.