이번 문제는 백트레킹을 이용하여 풀이하였다. 처음에는 수열에 중복된 수가 없을 것이라 생각하고 풀이하여 값에 대한 중복 처리를 하여 틀렸다. 중복된 수가 존재할 가능성을 생각하여, 선택된 수들의 인덱스를 따로 저장하고, 이에 대한 중복 처리를 하여 해결할 수 있었다.
tmp[i-1]-tmp[i]
의 절댓값을 더한다.get_result(tmp)
의 반환값 중 더 큰 값으로 갱신한다.arr[i]
를 넣는다.get_max(cnt+1)
을 재귀 호출한다.get_max(0)
을 호출한다.n=int(input())
arr=list(map(int, input().split()))
answer=0
tmp=[]
idxs=[]
def get_result(tmp):
result=0
for i in range(1, len(tmp)):
result+=abs((tmp[i-1]-tmp[i]))
return result
def get_max(cnt):
global answer
if cnt==n:
answer=max(answer, get_result(tmp))
return
for i in range(len(arr)):
if i in idxs:
continue
tmp.append(arr[i])
idxs.append(i)
get_max(cnt+1)
tmp.pop()
idxs.pop()
arr.sort()
get_max(0)
print(answer)