문제 설명


문제

N개의 정수로 이루어진 배열 A가 주어진다. 이때, 배열에 들어있는 정수의 순서를 적절히 바꿔서 다음 식의 최댓값을 구하는 프로그램을 작성하시오.

|A[0] - A[1]| + |A[1] - A[2]| + ... + |A[N-2] - A[N-1]|

입력

첫째 줄에 N (3 ≤ N ≤ 8)이 주어진다. 둘째 줄에는 배열 A에 들어있는 정수가 주어진다. 배열에 들어있는 정수는 -100보다 크거나 같고, 100보다 작거나 같다.

출력

첫째 줄에 배열에 들어있는 수의 순서를 적절히 바꿔서 얻을 수 있는 식의 최댓값을 출력한다.


풀이 과정

  1. 처음에 생각했을 때는, 최댓값, 최솟값, 두번째 최댓값, ... 이런식으로 배열해야 되는줄 알았으나.. 그냥 틀리길래 입력의 크기를 보니 최대 8개이므로 전수조사 하면 된다.
  2. 파이썬에서 제공하는 itertools.permutations 함수 사용
    • permutations(list, 갯수) => list에서 갯수만큼 뽑아서 조합
  3. 각각의 조합들에 대해 식의 값을 구한 후, 최댓값을 출력해주면 된다.

소스 코드


import sys
from itertools import permutations

input = sys.stdin.readline
N = int(input().rstrip())
array = list(map(int, input().rstrip().split()))
length = len(array)

total_case = list(permutations(array, length))

def simulation(case):
    value = 0
    for i in range(1, len(case)):
        value += abs(case[i] - case[i-1])

    return value

answer = 0
for case in total_case:
    answer = max(answer, simulation(case))

print(answer)

+ Recent posts