14888 - 연산자 끼워넣기
#14888
N = int(input())
A_lst = list(map(int,input().split()))
B_lst = list(map(int,input().split())) # + - * /
#백트래킹 문제
#재귀를 이용하는 것이 가장 좋을 것
max_value = -21e8
min_value = 21e8
def dfs(total, level, plus, minus, gop, nanugi):
global max_value, min_value
if level == N:
max_value = max(total, max_value)
min_value = min(total, min_value)
return
if plus:
dfs(total+A_lst[level], level+1, plus-1, minus, gop, nanugi)
if minus:
dfs(total-A_lst[level], level+1, plus, minus-1, gop, nanugi)
if gop:
dfs(total*A_lst[level], level+1, plus, minus, gop-1, nanugi)
if nanugi:
if total < 0:
dfs((total*(-1)//A_lst[level])*(-1), level+1, plus, minus, gop, nanugi-1)
else:
dfs(total//A_lst[level], level+1, plus, minus, gop, nanugi-1)
dfs(A_lst[0],1,B_lst[0], B_lst[1], B_lst[2], B_lst[3])
print(max_value)
print(min_value)
2504 - 괄호의 값🤔
#2504
arr = list(input())
# 여는 괄호는 스택에 넣고, 닫는 괄호는 스택에서 꺼내 짝을 비교
def cal():
stack = []
cur_value = 1
res_value = 0
for i in range(len(arr)):
if arr[i] == '(':
stack.append(arr[i])
cur_value *= 2
elif arr[i] == '[':
stack.append(arr[i])
cur_value *= 3
elif arr[i] == ')':
if not stack or stack[-1] != '(':
return 0
if arr[i-1] == '(':
res_value += cur_value
stack.pop()
cur_value //= 2
elif arr[i] == ']':
if not stack or stack[-1] != '[':
return 0
if arr[i-1] == '[':
res_value += cur_value
stack.pop()
cur_value //= 3
if stack:
return 0
return res_value
print(cal())