백준_14888_연산자 끼워넣기(백트래캥)

맹민재·2023년 4월 4일
0

알고리즘

목록 보기
31/134
import math

def dfs(pl, mi, mu, di, deph, x):
    global _max, _min
    if pl + mi + mu + di == 0:
        _max = max(_max, x)
        _min = min(_min, x)
        return
    if pl:
        dfs(pl-1, mi, mu, di, deph+1, x + n_list[deph+1])
    if mi:
        dfs(pl, mi-1, mu, di, deph+1, x - n_list[deph+1])
    if mu:
        dfs(pl, mi, mu-1, di, deph+1, x * n_list[deph+1])
    if di:
        if x >= 0:
            dfs(pl, mi, mu, di-1, deph+1, x // n_list[deph+1])
        else:
            dfs(pl, mi, mu, di-1, deph+1, -(-x // n_list[deph+1]))


n = int(input())
n_list = [int(v) for v in input().split()]
giho = [int(v) for v in input().split()]

_max = -math.inf
_min = math.inf

dfs(giho[0], giho[1], giho[2], giho[3], 0, n_list[0])
print(_max)
print(_min)

+, -, *, %의 횟수가 숫자로 주어지므로 dfs는 각각의 기호를 하나씩 빼면서 진행된다.. 종료 조건은 4개의 기호가 모두 0이 될 때이다.


profile
ㄱH ㅂrㄹ ㅈr

0개의 댓글