단순한 괄호 닫기 문제인데... Java로 풀다가 Python으로 풀려니까 규칙과 예외사항들을 생각하는 것이 어려웠다.
class Solution:
def isValid(self, s: str) -> bool:
brackets = {'(': 1, ')': -1, '{': 2, '}': -2, '[': 3, ']': -3} #dict
cur = [brackets[s[0]]]
for i in range(1, len(s)):
if brackets[s[i]] < 0:
if len(cur) == 0:
return False
if cur[len(cur)-1] * (-1) != brackets[s[i]]:
return False
else:
cur = cur[:len(cur)-1]
else:
cur.append(brackets[s[i]])
return True if len(cur) == 0 else False
문제를 풀 때는 stack을 생각하지 못했다.
그래서 코드가 많이 더럽다.
return문이 여러개 있는 것이 너무 마음에 안 든다💢
이 부분을 개선한 코드는
class Solution:
def isValid(self, s: str) -> bool:
brackets = {
'(' : ')',
'[': ']',
'{': '}'
}
opposite = {'}', ']', ')'}
stack = []
for i in s:
if i in brackets:
stack.append(brackets[i])
elif i in opposite:
if not stack or stack.pop() != i:
return False
return len(stack) == 0
이렇게 python의 list 함수 중 pop()을 사용하면 매우 깨끗하게 코드를 작성할 수 있다.