스택을 통해 최근에 들어간 괄호가 이번에 닫는 괄호의 종류와 매칭이 가능한지 체크하면서 균형이 깨졌는지 체크한다. 모든 문자열을 확인한 뒤 스택에 남아 있는 괄호가 없다면 균형 잡힌 문자열이다.
import sys
from collections import deque
while True:
s = sys.stdin.readline().rstrip()
if s == '.': break
stack = deque()
is_balanced = True
for letter in s:
if letter == '(':
stack.append(letter)
elif letter == '[':
stack.append(letter)
elif letter == ')':
if not stack:
is_balanced = False
break
elif stack[-1] == '(':
stack.pop()
else:
is_balanced = False
break
elif letter == ']':
if not stack:
is_balanced = False
break
elif stack[-1] == '[':
stack.pop()
else:
is_balanced = False
break
if not is_balanced: print('no')
elif stack: print('no')
else: print('yes')