https://school.programmers.co.kr/learn/courses/30/lessons/76502
def solution(s):
cnt = 0
gual = {']':'[','}':'{',')':'('}
for i in range(len(s)):
flag = False
tmp = s[i:]+s[:i]
stack = []
for j in tmp:
if j in gual.values():
stack.append(j)
else:
if not stack:
flag = True
break
if gual[j]==stack[-1]:
stack.pop()
if not stack and not flag:
cnt+=1
return cnt
흠 딕셔너리를 이용한 방법으로 시작 괄호 (,{,[
는 stack에 넣어주고, 닫는 괄호 ),},]
는 stack의 마지막 원소가 자신의 짝인지 확인해서 맞으면 pop해줌
코드 작성하면서 뭔가 간단하게 풀지 못하고 코드가 지저분해지는 것 같아서 걱정했는데 사람들 푼거 보니까 크게 다르진 않았음
흠,,, 어떤 코드가 좋은 코드일까
def solution(s):
cnt = 0
gual = {']':'[','}':'{',')':'('}
for i in range(len(s)):
flag = False
tmp = s[i:]+s[:i]
stack = []
for j in tmp:
if j in gual.values():
stack.append(j)
else:
if not stack or gual[j]!=stack[-1]:
flag = True
break
else:
stack.pop()
if not stack and not flag:
cnt+=1
return cnt
gual[j]!=stack[-1]
인지를 미리 확인하고 break 하면 위의 코드보다 조금 더 빠르게 가능하다.
다른 코드들을 돌려보니까 내가 오래 걸렸던 테스트에선 매우 짧게 나오고 내가 짧게 나온 테스트에선 매우 오래 걸리는 경우가 있었다. 아마 문제 특성상 어떻게 코드를 작성했는지에 영향을 많이 받는 듯 하다. 정답은 없다!