본문 바로가기
알고리즘 문제풀이/백준

백준 14888

by Hoseok 2023. 4. 4.
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
반응형

'알고리즘 문제풀이 > 백준' 카테고리의 다른 글

백준 2178  (0) 2023.04.05
백준 2667  (0) 2023.04.05
백준 2661  (0) 2023.04.01
백준 14889  (0) 2023.04.01
백준 2798  (0) 2023.03.31