https://www.acmicpc.net/problem/13164
문제
풀이
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int K = sc.nextInt();
int[] height = new int[N];
int[] comparison = new int[N-1];
for(int i = 0; i < N; i++){
height[i] = sc.nextInt();
}
for(int i = 0; i < N -1; i++){
comparison[i] = height[i+1] - height[i];
}
Arrays.sort(comparison);
int sum = 0;
for(int i = 0; i < N -K; i++){
sum += comparison[i];
}
System.out.println(sum);
}
}
키로 배열된 것보다 그 차이에 따른 값을 측정한다는 것에 중점을 뒀다.
문제의 예시를 따르면 1 3 5 6 10을 이용하기보다는 2 2 1 4로 변환한다. 이 후 3개의 그룹을 나눠야 한다는 것은 이 중 2개의 값을 제외할 수 있음을 의미하고, 최종적으로 남은 값을 더하면 되기 때문에 이 배열을 다시 정렬하여 최대값 K-1개를 제외하면 된다는 것이다. 이 때 i에 대한 반복 범위가 중요하다. K-1개라고 해서 단순히 i < N -(K-1)을 하게 되면 예시의 경우 i < 5 - (3-1) 즉, i < 3의 범위로 들어가 0, 1, 2의 인덱스에 대한 값을 갖기 때문에 i < N - K로 바로 입력해주어야 한다.
'문제 풀이 > 백준' 카테고리의 다른 글
[백준] 1546번. 평균 (JAVA) (0) | 2024.01.28 |
---|---|
[백준] 11720번. 숫자의 합(JAVA) (1) | 2024.01.28 |
[백준] 1758번. 알바생 강호(JAVA) (0) | 2024.01.16 |
[백준] 13305번. 주유소 (JAVA) (0) | 2024.01.16 |
[백준] 2217번. 로프 (JAVA) (0) | 2024.01.16 |