
s = input()
def is_check(s): # 올바른 괄호열인지 확인하는 함수
stack = []
flag = True
for i in range(len(s)):
if s[i] == '(' or s[i] == '[':
stack.append(s[i])
else: # ) ]
if s[i] == ')':
if stack and stack[-1] == '(':
stack.pop()
else:
flag = False
else: # ]
if stack and stack[-1] == '[':
stack.pop()
else:
flag = False
if not stack and flag:
return True
return False
def calc_value(s): # 괄호의 값을 계산하는 함수
stack = []
for i in range(len(s)):
if s[i] == '(' or s[i] == '[':
stack.append(s[i])
else: # ) ]
if s[i] == ')':
if stack[-1] == '(':
stack[-1] = 2
else: # 올바른 괄호열이기 때문에 숫자만 있다.
temp = 0
for idx in range(len(stack)-1, -1, -1): # 괄호 만날 때까지 계속 더해주기 (XY) = X + Y
if stack[idx] == '(':
stack[-1] = temp * 2
break
else: # ==> type(stack[idx]) == int
temp += stack[-1]
stack.pop()
else: # ]
if stack[-1] == '[':
stack[-1] = 3
else: # 올바른 괄호열이기 때문에 숫자만 있다.
temp = 0
for idx in range(len(stack)-1, -1, -1): # 괄호 만날 때까지 계속 더해주기 (XY) = X + Y
if stack[idx] == '[':
stack[-1] = temp * 3
break
else: # ==> type(stack[idx]) == int
temp += stack[-1]
stack.pop()
return sum(stack)
if is_check(s):
print(calc_value(s))
else:
print(0)
'문제풀이 > 백준(Boj) 문제풀이' 카테고리의 다른 글
[백준][BFS] 7576. 토마토 (파이썬/Python) (0) | 2021.11.09 |
---|---|
[백준][큐 & 덱] 18258. 큐 2 (파이썬/Python) (0) | 2021.11.08 |
[백준][구현] 10820. 문자열 분석 (파이썬/Python) (0) | 2021.11.02 |
[백준][구현] 2747. 피보나치 수 (파이썬/Python) (0) | 2021.11.02 |
[백준][구현] 11723. 집합 (파이썬/Python) (0) | 2021.11.01 |