def solution(s):
answer = True
cnt = 0
if s[0] == ')':
# 잘못된 경우
return False
for t in s:
if cnt == 0 and t == ')':
return False
if t == '(':
# 열면서 +1
cnt += 1
if t == ')':
# 닫으면서 -1
cnt -= 1
if cnt != 0:
return False
return True
다른 문제처럼 deque를 사용하고 싶었으나 구현이 어려워 무난한 방법으로 풀었습니다. 사이트에서 찾은 코드 중 가장 인상 깊었던 것 올려둡니다.
from collections import deque
def solution(s):
s_dq = deque(s)
stack = []
r = True
while s_dq:
tmp = s_dq.popleft()
if tmp == '(':
stack.append(tmp)
elif tmp == ')'and stack and stack[-1] == '(': # stack이 비어있지 않고 마지막 요소가 (인 경우
stack.pop()
else: r = False
if stack: # stack이 비어있지 않다면
return False
else: return r # stack이 비어있지만 )()인 경우 false, stack이 비어있는 경우 true