Homil-Rye 2023. 4. 4. 18:11
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
반응형