728x90
투 포인터 문제입니다.
두 값의 차의 절댓값이 M이상이면서 가장 작은 값을 찾아야합니다.
같은 수를 고를수도 있습니다.
left와 right를 0으로 둡니다.
해당 위치의 값들의 차이를 구합니다.
1. m보다 작은 경우
- right 증가
2. m보다 큰 경우
- left 증가
- 결과값보다 작으면 갱신
3. m과 같은 경우
- left, right 증가
- 결과값보다 작으면 갱신
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
int[] arr = new int[n];
int result = 2_000_000_001;
for (int i = 0; i < n; ++i) {
arr[i] = Integer.parseInt(br.readLine());
}
Arrays.sort(arr);
int left = 0;
int right = 0;
while (left <= right && right < n) {
int num = Math.abs(arr[left] - arr[right]);
if (num < m) {
++right;
} else if (num > m) {
result = Math.min(result, num);
++left;
} else {
result = Math.min(result, num);
++right;
++left;
}
}
bw.write(result + "\n");
bw.close();
}
}
'알고리즘' 카테고리의 다른 글
[Java] 백준 1394번 암호 (0) | 2023.08.09 |
---|---|
[Java] 백준 16507번 어두운 건 무서워 (0) | 2023.08.09 |
[Java] 백준 11509번 풍선 맞추기 (0) | 2023.08.09 |
[Java] 백준 1092번 배 (0) | 2023.08.08 |
[Java] 백준 2343번 기타 레슨 (0) | 2023.08.08 |