< 문제 >
< 입출력 >
< 풀이 >
k개의 그룹을 만들기 위해서는 k-1 개의 구분이 필요하다.
연속하는 숫자의 차이를 계산한다.
위의 경우, 3개의 구분이 필요하다. 차이가 큰 3개를 없애주는 것이 차이를 가장 줄일 수 있는 방법이다.
예시에서는 2, 4, 4 차이가 있는 부분에 구분을 두는 것이 가장 차이의 합이 작아진다.
1번과 2번의 경우 같은 2, 4, 4를 줄이기 때문에 결과값은 같다.
< 구현 코드 >
import sys
input = sys.stdin.readline
N, K = map(int, input().split())
height = list(map(int, input().split()))
height.sort()
diff = [] # 연속하는 수의 차이를 담을 배열
for i in range(0, N-1):
diff.append(height[i+1]-height[i])
diff.sort()
print(sum(diff[:len(diff)-K+1])) # 총 차이의 개수를 구해서 가장 큰 K-1개를 제외하고 더해준다
'코딩 테스트 > 그리디' 카테고리의 다른 글
[백준 1080번] 행렬 문제 풀이 (1) | 2023.11.19 |
---|---|
[백준 19598번] 배 문제 풀이 (0) | 2023.11.04 |
[백준 11000번] 강의실 배정 문제 풀이 (with Python) (0) | 2023.11.04 |
[백준 2212번] 센서 문제 풀이 (0) | 2023.09.25 |
[백준 2195번] 문자열 복사 문제 풀이 (0) | 2023.09.24 |
댓글