## 문제

n개의 정수로 이루어진 배열에서, 배열의 순서를 적절히 바꿔서 인접한 값의 차이가 가장 클때, 그 값이 몇인지 출력하는 프로그램 작성

n은 3이상 8이하로, 많은 숫자가 주어지지는 않는다. 주어지는 숫자의 범위도 +-100정도로 작다


## code

from itertools import permutations as pe

n = int(input())
l = list(map(int,input().split()))

pe_idx = []
for k in pe(range(n),n):
    pe_idx += [k]

# 랜덤으로 픽해서 담은걸 l2에
l2 = []
for tmp in pe_idx:
    tmp_l = []
    for idx in tmp:
        tmp_l += [l[idx]]
    l2 += [tmp_l]

# 모든 경우의 차이 리스트를 계산하고 다시 합을 구해서 저장. 그중 최대가 정답
ans = []
for case in l2:
    abs_l = []
    for idx in range(n-1):
        abs_l += [abs(case[idx]-case[idx+1])]
    ans += [sum(abs_l)]

print(max(ans))

처음에는 정렬해서 맨 처음값[0], 맨 끝의값[-1], 그다음 처음값[1], 그 다음 끝값[-2] 순서로 재배열해서 계산하면 될거라고 생각했는데... 문제에 주어지는 예제로 계산해도 틀린 경우가 나온다.

모든 경우를 itertools - permutations 이용하여 뽑아내서 계산하고 그중 가장 큰 값이 출력되도록 하면 된다. 

문제에서 주어지는 숫자 자체가 많지 않아서


import itertools
N=int(input());l=list(map(int,input().split()));r=0
for x in itertools.permutations(l):
    c=0
    for i in range(N-1):
        c+=abs(x[i]-x[i+1])
    r=max(c,r)
print(r)

다른 사람 풀이도 비슷해보인다.

c로 문제 푼 사람의 경우 perm 함수를 만들어서 풀었다