1+ import sys
2+ input = sys .stdin .readline
3+
4+ n = int (input ())
5+ nums = list (map (int , input ().strip ().split ()))
6+ ops = list (map (int , input ().strip ().split ()))
7+
8+ # 최댓값과 최솟값을 구하기 위해 초기값 설정
9+ max_result = - int (1e9 )
10+ min_result = int (1e9 )
11+
12+ def dfs (nums , index , current_result , plus , minus , multiply , divide ):
13+ global max_result , min_result
14+
15+ if index == len (nums ):
16+ # 모든 숫자를 다 사용했으면 최댓값과 최솟값 갱신
17+ max_result = max (max_result , current_result )
18+ min_result = min (min_result , current_result )
19+ return
20+
21+ if plus > 0 :
22+ dfs (nums , index + 1 , current_result + nums [index ], plus - 1 , minus , multiply , divide )
23+ if minus > 0 :
24+ dfs (nums , index + 1 , current_result - nums [index ], plus , minus - 1 , multiply , divide )
25+ if multiply > 0 :
26+ dfs (nums , index + 1 , current_result * nums [index ], plus , minus , multiply - 1 , divide )
27+ if divide > 0 :
28+ if current_result < 0 :
29+ # 음수일 때의 나눗셈 처리
30+ dfs (nums , index + 1 , - (- current_result // nums [index ]), plus , minus , multiply , divide - 1 )
31+ else :
32+ dfs (nums , index + 1 , current_result // nums [index ], plus , minus , multiply , divide - 1 )
33+
34+
35+
36+ # 초기값은 첫 번째 숫자, index는 1부터 시작
37+ dfs (nums , 1 , nums [0 ], ops [0 ], ops [1 ], ops [2 ], ops [3 ])
38+
39+ print (max_result )
40+ print (min_result )
41+
42+ '''
43+ # 3달 전 풀이
44+
45+ # 입력받기
46+ n = int(input()) # 수의 개수
47+ nums = list(map(int, input().split())) # 수열
48+ operator = list(map(int, input().split()))
49+
50+ # 최솟값, 최댓값 초기화
51+ maxValue = int(-1e9)
52+ minValue = int(1e9)
53+
54+ def calculator(idx, res, add, sub, prd, div):
55+ global minValue, maxValue
56+
57+ if idx == n:
58+ # 최솟값과 최댓값 갱신
59+ maxValue = max(maxValue, res)
60+ minValue = min(minValue, res)
61+ return
62+
63+ if add > 0:
64+ calculator(idx + 1, res + nums[idx], add-1, sub, prd, div)
65+
66+ if sub > 0:
67+ calculator(idx + 1, res - nums[idx], add, sub-1, prd, div)
68+
69+ if prd > 0:
70+ calculator(idx + 1, res * nums[idx], add, sub, prd-1, div)
71+
72+ if div > 0:
73+ calculator(idx + 1, int(res / nums[idx]), add, sub, prd, div-1)
74+
75+ calculator(1, nums[0], operator[0], operator[1], operator[2], operator[3])
76+ print(maxValue)
77+ print(minValue)
78+ '''
0 commit comments