Algorithm Problems

[백준] [Python] 14888번 연산자 끼워넣기 - 백트래킹

WakaraNai 2021. 5. 18. 01:00
728x90
반응형

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

 

14888번: 연산자 끼워넣기

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

www.acmicpc.net

 

 

 

Python

n = int(input())
arr = list(map(int, input().split()))
op = list(map(int, input().split()))

maxi = -10**10
mini = 10**10
def back(k,idx,nt):
    global maxi,mini
    #print(k,op,nt)
    if k == n-1:
        maxi = max(maxi,nt)
        mini = min(mini,nt)
        #print()
        return
    #for i in range(idx,n): 
    if op[0]:
        op[0]-=1; back(k+1,idx+1,nt+arr[idx+1]); op[0]+=1
    if op[1]:
        op[1]-=1; back(k+1,idx+1,nt-arr[idx+1]); op[1]+=1
    if op[2]:
        op[2]-=1; back(k+1,idx+1,nt*arr[idx+1]); op[2]+=1
    if op[3]:
        op[3]-=1;
        if nt<0:
            back(k+1,idx+1,-(-nt//arr[idx+1]));
        else:
            back(k+1,idx+1,nt//arr[idx+1]);
        op[3]+=1

back(0,0,arr[0])
print(maxi)
print(mini)
728x90
반응형