balanced bracket이란? 짝이 없는 괄호가 없고, 괄호의 부분집합이 짝이 맞는 괄호안에 들어가있어야 한다
[ 가 열려있으면 같은 타입의 괄호로 닫히기 전까지 다른 타입의 닫힘 괄호가 올 수 없다는게 포인트
풀이
def isBalanced(s):
# Write your code here
pairs= {'[':']',
'{':'}',
'(':')'}
stacks = []
for i in s:
if i in pairs:
stacks.append(pairs[i])
else:
try:
if i != stacks.pop():
return "NO"
except:
return "NO"
if len(stacks)==0:
return "YES"
else:
return "NO"
괄호 문제는 코딩 테스트 단골 주제인 것 같다. 열린 괄호에 대해 닫아줘야하는 괄호를 key-value 쌍으로 묶어주고, 열린 괄호를 받으면 닫혀야하는 괄호를 스택으로 쌓아주다가 닫는 괄호를 마주칠때마다 쌓아준 순서와 맞는지 확인하고, 틀리다면 NO 를 리턴해준다.
3개의 test case에 대해서만 wrong answer가 뜨길래, 마지막 예외처리를 해주었다. 중요한 이유는 닫힌건 잘 닫혔는데 마지막에 열린 괄호들이 남으면 YES 를 리턴해버렸기 때문! 이거 생각해내느라 오래 걸렸다