https://www.acmicpc.net/problem/2230
풀이
n개의 정수가 주어지고, 두 수를 골랐을 때 차이가 m 이상인 경우 중 제일 작은 경우를 골라야 한다.
정렬을 해놓고 슬라이딩윈도우를 통해 두 수를 골라 차이를 비교했다.
start, end 이렇게 두 포인터를 두고 두 수의 차이가 m보다 작은 경우 end를 1 늘린다.
두 수의 차이가 큰 경우 정답을 갱신하고 start를 1늘린다.
메모리: 28584KB
시간: 396ms
언어: Java 11
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
int[] arr = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = Integer.parseInt(br.readLine());
}
Arrays.sort(arr);
int start = 0;
int end = 0;
int answer = Integer.MAX_VALUE;
while (start <= end && end < n) {
int dist = arr[end] - arr[start];
if (dist < m) {
end++;
} else {
answer = Math.min(answer, dist);
start++;
}
}
System.out.println(answer);
}
}
'Algorithm > Baekjoon' 카테고리의 다른 글
[백준] 1577: 도로의 개수 - JAVA (1) | 2024.05.23 |
---|---|
[백준] 15591: MooTube (Silver) - JAVA (0) | 2024.05.20 |
[백준] 15971: 두 로봇 - JAVA (0) | 2024.05.19 |
[백준] 25682: 체스판 다시 칠하기 2 - JAVA (0) | 2024.05.19 |
[백준] 3078: 좋은 친구 - JAVA (0) | 2024.05.19 |
[백준] 14395: 4연산 - JAVA (0) | 2024.05.19 |