반응형
[Silver II] 차이를 최대로 - 10819
https://www.acmicpc.net/problem/10819
문제설명
N개의 정수로 이루어진 배열 A가 주어진다. 이때, 배열에 들어있는 정수의 순서를 적절히 바꿔서 다음 식의 최댓값을 구하는 프로그램을 작성하시오.
|A[0] - A[1]| + |A[1] - A[2]| + ... + |A[N-2] - A[N-1]|
입력
첫째 줄에 N (3 ≤ N ≤ 8)이 주어진다. 둘째 줄에는 배열 A에 들어있는 정수가 주어진다. 배열에 들어있는 정수는 -100보다 크거나 같고, 100보다 작거나 같다.
출력
첫째 줄에 배열에 들어있는 수의 순서를 적절히 바꿔서 얻을 수 있는 식의 최댓값을 출력한다.
예제입력 / 예제출력
문제이해 및 코드정리
주어진 배열에서 순서를 적절히 바꾸면서 위의 식을 대입한 결과 최대값을 출력하는 문제이다.
문제를 고민하다보니 순서를 고려하여 가능한모든 경우의수를 생각해야 한다고 생각했다.
itertools라는 라이브러리를 사용하면 순열, 조합 등을 쉽게 만들수 있다. 해당 문제에서는 순서를 고려하고 중복을 허용하지 않으므로
itertools에서 permutations 함수를 사용해주었다. 인자는 2개가 필요하고 예시는 다음과 같다.
permutations(iterable,r=None) : iterable에서 원소 개수가 r개인 순열뽑기
코드
import sys
import itertools
N = int(sys.stdin.readline())
A = list(map(int,sys.stdin.readline().split()))
A.sort()
# 가능한 모든경우의 수 해보기 위해 순열로 만듬()
arr = list(itertools.permutations(A,N))
result = 0
for i in range(len(arr)):
cur = 0
for j in range(0,N-1):
cur += abs(arr[i][j] - arr[i][j+1])
if cur > result:
result = cur
print(result)
반응형
'알고리즘 문제풀이' 카테고리의 다른 글
백준 - 큐 10845(Python) (0) | 2023.02.27 |
---|---|
백준 - 스택 10828(Python) (0) | 2023.02.27 |
백준 - 국영수 10825 (Python) (0) | 2023.02.27 |
백준 - 제로 10773 (Python) (0) | 2023.02.26 |
백준 - 보물 1026 ( Python) (0) | 2023.02.25 |