다행히도, 곱하기와 나누기의 연산 우선순위가 없기 때문에 문제를 단순하게 접근할 수 있다.
숫자를 하나씩 뽑아서, 남아있는 연산자 중 하나를 이용해 계산해 나가는 DFS를 구성하면 된다.
모든 숫자를 다 사용했다면, 전역변수로 사용하고 있는 최대, 최솟값과 비교해서 값을 업데이트해주면 된다.
case = int(input())
numbers = list(map(int,input().split()))
four=list(map(int,input().split()))
max_value = -1e9
min_value = 1e9
def dfs(i, value):
global max_value, min_value
if i == case:
max_value = max(max_value,value)
min_value = min(min_value,value)
else:
if four[0] > 0:
four[0] -= 1
dfs(i+1, value+numbers[i])
four[0] += 1
if four[1] > 0:
four[1] -= 1
dfs(i+1, value-numbers[i])
four[1] += 1
if four[2] > 0:
four[2] -= 1
dfs(i+1, value*numbers[i])
four[2] += 1
if four[3] > 0:
four[3] -= 1
dfs(i+1, int(value/numbers[i]))
four[3] += 1
dfs(1,numbers[0])
print(max_value)
print(min_value)