문제출처 : https://www.acmicpc.net/problem/2504
def check(s):
stack=[]
for i in s:
if i == "(" or i == "[":
stack.append(i)
elif i == ")":
if not stack:
return False
elif stack[-1] == "(":
stack.pop()
else:
stack.append(i)
elif i == "]":
if not stack:
return False
elif stack[-1] == "[":
stack.pop()
else:
stack.append(i)
if len(stack) > 0:
return False
else:
return True
def solve(s):
stack = []
for i in s:
if i == "(" or i =="[":
stack.append(i)
elif i == ")":
if stack[-1] == "(":
stack[-1] = 2
else:
# "(" 값을 찾을 때 까지 temp 에 값을 저장하고 temp*2를 append 해준다.
# check함수에서 확인했기에 오류는 걱정하지 않도록 하자.
temp = 0
while stack:
if stack[-1] == "(":
stack.pop()
break
else:
temp += stack.pop()
stack.append(temp*2)
elif i == "]":
if stack[-1] == "[":
stack[-1] = 3
else:
temp = 0
while stack:
if stack[-1] == "[":
stack.pop()
break
else:
temp += stack.pop()
stack.append(temp*3)
return print(sum(stack))
s = input()
if check(s) == False:
print(0)
else:
solve(list(s))