https://www.acmicpc.net/problem/2504
import sys
def solution(p_list):
stack = []
for p in p_list:
if p in ["(", "["]:
stack.append(p)
elif stack and p in [")", "]"]:
v = 0
last = stack.pop()
while stack and isinstance(last, int):
v += last
last = stack.pop()
v = 1 if v == 0 else v
if p == ")" and last == "(":
stack.append(2 * v)
elif p == "]" and last == "[":
stack.append(3 * v)
else:
return 0
else:
return 0
if all(isinstance(s, int) for s in stack):
return sum(stack)
else:
return 0
parentheses = sys.stdin.readline().strip()
print(solution(parentheses))
괄호를 스택에 쌓아가면서 계산하여 숫자도 같이 스택에 넣었다.
) 또는 ]이 나오면 숫자가 아닌 값이 나올 때까지 뽑았고, 나오는 숫자들은 모두 더하였다.
제대로 된 괄호가 나오면 규칙에 맞게 곱하여 다시 스택에 넣었다.