입력
(()[[]])([])
출력
28
parens | stack | temp | result |
---|---|---|---|
( | ( | 2 | 0 |
(( | (( | 4 | 0 |
(() | ( | 2 | 4 |
(()[ | ([ | 6 | 4 |
(()[[ | ([[ | 18 | 4 |
(()[[] | ([ | 6 | 22 |
(()[[]] | ( | 2 | 22 |
(()[[]]) | X | 1 | 22 |
(()[[]])( | ( | 2 | 22 |
(()[[]])([ | ([ | 6 | 22 |
(()[[]])([] | ( | 2 | 28 |
(()[[]])([]) | X | 1 | 28 |
parens = list(input().strip())
stack = []
result = 0
flag = True # stack이 비어있는지 아닌지 여부를 판별하는 변수
temp = 1
for i in range(len(parens)):
if parens[i] == "(":
temp *= 2
stack.append(parens[i])
elif parens[i] == "[":
temp *= 3
stack.append(parens[i])
elif parens[i] == ")":
if not stack or stack[-1] != "(":
flag = False
break
if i > 0 and parens[i - 1] == "(":
result += temp
stack.pop()
temp //= 2
elif parens[i] == "]":
if not stack or stack[-1] != "[":
flag = False
break
if i > 0 and parens[i - 1] == "[":
result += temp
stack.pop()
temp //= 3
if not flag or stack:
print(0)
else:
print(result)