코딩테스트

BFS&DFS_심화19) 연산자 끼워 넣기 _ python

728x90

문제링크

https://www.acmicpc.net/problem/14888

 

14888번: 연산자 끼워넣기

첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, 곱

www.acmicpc.net

코드

import sys
input = sys.stdin.readline
n = int(input())
num = list(map(int, input().split()))
op = list(map(int, input().split()))

maximum = -1e9
minimum = 1e9

def dfs(depth, total, plus, minus, multiply, divide) :
    global maximum, minimum
    if depth == n:
        maximum = max(total, maximum)
        minimum = min(total, minimum)
        return
    if plus:
        dfs(depth +1, total + num[depth], plus - 1, minus, multiply, divide)
    if minus:
        dfs(depth +1, total - num[depth], plus, minus - 1, multiply, divide)
    if multiply:
        dfs(depth +1, total * num[depth], plus, minus, multiply - 1, divide)
    if divide:
        dfs(depth +1, int(total / num[depth]), plus, minus, multiply, divide - 1)

dfs(1, num[0], op[0], op[1], op[2], op[3])
print(maximum)
print(minimum)
728x90