과정
- 백트래킹
- 연산자들 순서대로 배열을 만들고, 최대값, 최소값 계산하고 업데이트
N = int(input())
nums = list(map(int, input().split()))
a, b, c, d = list(map(int, input().split()))
operators = []
operators.extend([0]*a)
operators.extend([1]*b)
operators.extend([2]*c)
operators.extend([3]*d)
max_ans = -1e13
min_ans = 1e13
M = N-1
result = []
visited = [False] * (M)
def OperaterOrder(level):
if level == M:
ans = nums[0]
for i in range(M):
if result[i] == 0:
ans += nums[i+1]
elif result[i] == 1:
ans -= nums[i+1]
elif result[i] == 2:
ans *= nums[i+1]
elif result[i] == 3:
if ans < 0:
ans = (abs(ans)//nums[i+1]) * (-1)
else:
ans = ans // nums[i+1]
# print(i, operators[result[i]], nums[i+1], ans)
global max_ans
global min_ans
print(max_ans, min_ans, ans)
if max_ans < ans:
max_ans = ans
if min_ans > ans:
min_ans = ans
return
for i in range(M):
if not visited[i]:
visited[i] = True
result.append(operators[i])
OperaterOrder(level + 1)
visited[i] = False
result.pop()
OperaterOrder(0)
print(max_ans)
print(min_ans)
좋은 풀이 같아요