주어진 N개의 자연수들을 K명에게 나누어줄 때, 최솟값과 최댓값의 차이의 최솟값을 구하는 문제이다.
자연수들을 정렬한 후, 처음부터 연속된 K개를 가진 구간을 뒤로 이동하면서 구간 내에서의 최댓값과 최솟값의 차이가 가장 작은 값을 찾는다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
StringBuilder sb = new StringBuilder();
for(int tc=1; tc<= T; tc++) {
sb.append('#').append(tc).append(' ');
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken()), k = Integer.parseInt(st.nextToken());
int[] board = new int[n];
st = new StringTokenizer(br.readLine());
for(int i=0; i<n; i++) board[i] = Integer.parseInt(st.nextToken());
Arrays.sort(board);
int start = 0, end = k-1;
int diff = Integer.MAX_VALUE;
while(end < n) {
diff = Math.min(diff, board[end] - board[start]);
end++;
start++;
}
sb.append(diff).append('\n');
}
br.close();
System.out.print(sb);
}
}
'알고리즘(백준 등) 공부' 카테고리의 다른 글
| SWEA 20551. 증가하는 사탕 수열 (0) | 2026.04.26 |
|---|---|
| SWEA 20731. 서로소 그리드 (0) | 2026.04.25 |
| SWEA 20955. XY 문자열 1 (0) | 2026.04.24 |
| SWEA 21131. 행렬정렬 (1) | 2026.04.23 |
| SWEA 21426. 흰 종이와 검은 종이 (0) | 2026.04.23 |