💃🏻
https://www.acmicpc.net/problem/23561
23561번: Young한 에너지는 부족하다
연령이 22, 23, 26살인 세 명을 묶어서 하나, 21, 24, 25살인 세 명을 묶어서 하나의 크루를 만들면 된다. 각 크루의 에너지(연령의 중간값)는 23과 24가 되며, 문제에서 구하는 값은 24 - 23 = 1이 된다.
www.acmicpc.net
내 풀이
N = int(input())
player = sorted(list(map(int, input().split()))) # 오름차순 정렬
energy = player[N:N+N]
print(energy[-1] - energy[0])
코드 설명
풀이 방식이 바로 떠오르지 않아서 그려보면서 방법을 찾으려고 했다.
내가 크루를 구성했던 방식은 다음과 같다.
[남은 크루원 중 가장 나이가 적은 크루원, 남은 크루원 중 가장 나이가 많은 크루원, 남은 크루원 중 가장 중간 나이인 크루원]
어차피 가장 나이가 적은 크루원과 가장 나이가 많은 크루원의 값은 버려진다. (쓸모가 없다.)
각 크루의 에너지(두 번째 크루원)를 최대한 중간값들로 구성해 크루 간의 에너지 차이가 적게 나도록 구성했다.
규칙을 찾았다!
각 크루의 에너지는 player의 N번 인덱스에서 시작하여 총 N개의 값들로 구성된다.
이 규칙이 성립하려면, 크루원들을 무조건 정렬해주어야 한다. (그래야 가운데에 오는 값들이 실제로 중간값들이 될 테니)
player = sorted(list(map(int, input().split()))) # 오름차순 정렬
player의 N번 인덱스부터 N개를 가져와 에너지 리스트를 만들어준다.
energy = player[N:N+N]
가장 에너지가 높은 크루에서 가장 에너지가 낮은 크루를 뺀 값이 정답이 된다.
이때 max(energy) - min(energy)와 같이 수행해도 되지만,
어차피 오름차순 정렬되어 있기 때문에, 가장 큰 값이 맨 끝에, 가장 작은 값이 맨 앞에 위치한다.
print(energy[-1] - energy[0])
'코딩테스트' 카테고리의 다른 글
[백준][Python] 7568 덩치 (0) | 2024.05.12 |
---|---|
[프로그래머스][Python] 대충 만든 자판 (1) | 2024.04.28 |
[백준][Python] 2195 문자열 복사 (0) | 2024.04.21 |
[백준][Python] 1189 컴백홈 (0) | 2024.04.14 |
[백준][Python] 2960 에라토스테네스의 체 (0) | 2024.04.13 |