본문 바로가기

백준 문제풀이

10819번: 차이를 최대로 / silver 2 / 브루트포스, 순열

https://www.acmicpc.net/problem/10819

 

10819번: 차이를 최대로

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

www.acmicpc.net

'''
10819번: 차이를 최대로 / silver 2 / 브루트포스, 순열
'''
import itertools
# N, arr 입력받기
N = int(input())
arr = list(map(int, input().split()))
# 순열 활용 case_arr 만들기
case_arr = itertools.permutations(arr, N)
# 최대값 구하기
max_res = 0
# case_arr 에서 하나씩 꺼내어 case의 최대값을 구한뒤, 전체 최대값과 비교 
for case in case_arr:
    res = 0
    for i in range(1, len(case)):
        res += abs(case[i - 1] - case[i])
    if max_res < res:
        max_res = res
# 최대값 출력하기
print(max_res)

코드 리뷰

- 해당 문제를 푸는데 약 15분 정도 소요했습니다.

- 배열에 들어있는 순서를 바꿔 최댓값을 알아내는 문제이기에, 순서를 바꾼 배열들을 모두 하나씩 확인해야겠다고 생각했습니다.

- 순서를 바꾼 배열들은 itertools.permutations() 를 활용하여 구하고, 

- 순서를 바꾼 배열을 하나씩 꺼내서 최대값 구한 뒤, 전체 최대값과 비교하는 로직을 구현했습니다.