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보다 작거나 같다.
출력
첫째 줄에 배열에 들어있는 수의 순서를 적절히 바꿔서 얻을 수 있는 식의 최댓값을 출력한다.
풀이
from itertools import permutations as pm
N = int(input())
A = list(map(int, input().split()))
max_value = 0
for i in pm(A, N):
temp = 0
for j in range(N - 1):
temp += abs(i[j] - i[j + 1] )
max_value = max(max_value, temp)
print(max_value)
입력값 N이 3에서 9까지로, 매우 작은 수임을 통해 "완전탐색"으로 풀이가 가능함을 알 수 있다.
완전탐색은 모든 경우의 수를 따져보는 방식이기에, 순열(permutations) 모듈을 사용하였다.
순열을 통해 뽑은 자료에 대하여 각각 반복문으로 차이의 합을 구한 후, temp 변수에 저장하였다. 이후 max 메소드로 최댓값을 구하였다.
히든 테스트케이스도 없고, 개인적으로 쉽게 푼 문제였다!
'Coding Test > Problems' 카테고리의 다른 글
| [BOJ | Python] 15656번: N과 M (7) (1) | 2024.09.29 |
|---|---|
| [BOJ | Python] 6603번: 로또 (2) | 2024.09.29 |
| [BOJ | Python] 1051번: 숫자 정사각형 (0) | 2024.09.23 |
| [Kotlin] 정사각 알파벳 출력하기 (3) | 2024.09.12 |
| [BOJ] 15665번: N과 M (11) (0) | 2024.08.25 |