n = int(input())
a = list(map(int, input().split()))
C = list(map(int, input().split()))
minv = 1000000000
maxv = -minv
def DFS(value, i, op, left1, left2, left3, left4) :
if op == 1 :
value = value + a[i]
elif op == 2 :
value = value - a[i]
elif op == 3 :
value = value * a[i]
else :
value = int(value / a[i])
if i == n - 1 :
global maxv, minv
maxv = max(maxv, value)
minv = min(minv, value)
else :
if left1 > 0 :
DFS(value, i + 1, 1, left1 - 1, left2, left3, left4)
if left2 > 0 :
DFS(value, i + 1, 2, left1, left2 - 1, left3, left4)
if left3 > 0 :
DFS(value, i + 1, 3, left1, left2, left3 - 1, left4)
if left4 > 0 :
DFS(value, i + 1, 4, left1, left2, left3, left4 - 1)
for i in range(4) :
if C[i] != 0 :
C[i] = C[i] - 1
DFS(a[0], 1, i + 1, C[0], C[1], C[2], C[3])
C[i] = C[i] + 1
print(maxv)
print(minv)
|
경우의수가 적고 메모리도 넉넉하니 그냥 DFS로 모든 경우의 수를 체크하며 max와 min을 기록해 출력하면 된다.
나눗셈을 할땐 //를 쓰면 음수의 나눗셈에서 일반적이지 않은 결과가 나와서 int(/)를 이용했다.
'Week 01 ~ 04 : 알고리즘 문제 풀이' 카테고리의 다른 글
파이썬 백준 2252 줄 세우기 (0) | 2021.11.23 |
---|---|
파이썬 백준 2617 구슬 찾기 (0) | 2021.11.23 |
파이썬 백준 1707 이분 그래프 (0) | 2021.11.23 |
파이썬 백준 21606 아침 산책 (0) | 2021.11.21 |
파이썬 백준 11725 트리의 부모 찾기 (0) | 2021.11.21 |