728x90
반응형
import sys
n = int(input())
numbers = list(map(int, input().split()))
operators = list(map(int, input().split())) # 덧셈, 뺄셈, 곱셈, 나눗셈 개수
max_result = -sys.maxsize # 최댓값 초기화
min_result = sys.maxsize # 최솟값 초기화
def calculate(expression):
# 주어진 수식의 결과를 계산하는 함수
stack = []
for e in expression:
if e.isdigit():
stack.append(int(e))
else:
b, a = stack.pop(), stack.pop()
if e == '+':
stack.append(a + b)
elif e == '-':
stack.append(a - b)
elif e == '*':
stack.append(a * b)
else:
if a < 0 and b > 0:
stack.append(-(abs(a) // b))
else:
stack.append(a // b)
return stack[0]
def backtrack(operators, expression):
global max_result, min_result
if len(expression) == n - 1: # 모든 연산자가 배치되면 수식 계산
result = calculate(expression)
max_result = max(max_result, result)
min_result = min(min_result, result)
return
for i, op in enumerate(['+', '-', '*', '/']):
if operators[i] > 0: # 해당 연산자를 사용할 수 있는 경우
operators[i] -= 1 # 해당 연산자 개수 감소
backtrack(operators, expression + [op]) # 연산자 추가
operators[i] += 1 # 백트래킹
backtrack(operators, [])
print(max_result)
print(min_result)
728x90
반응형