파싱과 스택을 적절히 활용하면 크게 문제 없이 풀 수 있을 거라 생각했지만...
str = input()
stack = []
for i in str:
strLength = 0
if i==')':
strIndex=0
zipNum = ''
while True:
temp = stack.pop()
if temp=='(':
num = stack.pop()
strLength += int(num)*len(zipNum)
stack.append('1'*strLength)
break
zipNum += temp
strIndex+=1
else:
stack.append(i)
answer = 0
for i in stack:
if i == '':
pass
else:
answer += len(i)
print(answer)
깊이가 남다른 코드, 메모리초과가 나올 수 밖에 없다.
str = input()
stack = []
length = 0
temp = ''
for i in str:
if i == '(':
stack.append((temp, length-1))
length = 0
elif i == ')':
zippedNum, preLength = stack.pop()
length = (int(zippedNum)*length)+preLength
else:
length += 1
temp = i
print(length)
안쪽에 있던 조건문을 앞으로 빼서 정리해서 깊이를 조절했다.
생각해보면, '('가 나온 것부터 쌓는 게 맞는 건데 왜 ')'까지를 잘라낼려고 했는지 모르겠다.
그래서 딱 순서대로 빼니 아주 간결해졌다.
s=[]
f=lambda t:[t,1][type(t)==str]
for i in input():
if i==')':
l,t=0,s.pop()
while t!='(':l+=f(t);t=s.pop()
s+=[int(s.pop())*l]
else:s+=[i]
print(sum(map(f,s)))
특이한 구문이 많아서 좀 더 연구해봐야할 것 같아서 기록.