코테 공부

백준[14888] 연산자 끼워넣기 (파이썬 풀이)

moonsun623 2021. 10. 5. 20:58
반응형

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

 

14888번: 연산자 끼워넣기

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

www.acmicpc.net

내가 한 풀이

n=int(input())
nums=list(map(int,input().split(" ")))
operator=list(map(int,input().split(" ")))


maximum= -1e9
minimum=1e9

def dfs(depth,total,add,sub,mul,div):
    global maximum, minimum
    if depth==n:
        maximum=max(total,maximum)
        minimum=min(total,minimum)
        return
    else:
        if add:
            dfs(depth+1,total+nums[depth],add-1,sub,mul,div)
        if sub:
            dfs(depth+1,total-nums[depth],add,sub-1,mul,div)
        if mul:
            dfs(depth+1,total*nums[depth],add,sub,mul-1,div)
        if div:
            dfs(depth+1,int(total/nums[depth]),add,sub,mul,div-1)
dfs(1,nums[0],operator[0],operator[1],operator[2],operator[3])
print(maximum)
print(minimum)

최대값, 최솟값을 모두 구해야 했기 때문에 모든 경우의 수를 다 구해야 했다.

재귀 함수(dfs)를 이용해 모든 경우의 수를 탐색 하되, 종료 조건을 앞에 넣어주었다.