https://www.acmicpc.net/problem/2504

( 또는 [ 일때 스택에 담아 놓으며 중첩횟수에 따라 temp에 값을 곱해놓으며 이후 무조건 "( )" 와 "[ ]" 의 짝이 맞는다면 pop 하며 값을 저장한다. 이후 1개의 괄호를 제거했으므로 중첩횟수 1개를 줄이기 위한 2 또는 3을 괄호의 종류에 따라 나눈다. 만약 괄호의 종류가 맞지 않는 상태거나 비어있는 상태라면 잘못된 형식임으로 중단한다.
여기서 초기에는 형식이 알맞지 않은 경우에는 스택이 남아있을거라고 생각해 조건문을 남겨놨었다.
import sys
s = sys.stdin.readline().strip()
stack = []
ans = 0
temp = 1
for idx in range(len(s)):
if s[idx] == '(':
stack.append(s[idx])
temp *= 2
elif s[idx] == '[':
stack.append(s[idx])
temp *= 3
elif s[idx] == ')':
if not stack or stack[-1] != '(':
ans = 0
break
if s[idx-1] == '(':
ans += temp
stack.pop()
temp //= 2
elif s[idx] == ']':
if not stack or stack[-1] != '[':
ans = 0
break
if s[idx-1] == '[':
ans += temp
stack.pop()
temp //= 3
if stack:
print(0)
else:
print(ans)