https://www.acmicpc.net/problem/9024
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Arrays;
public class Main {
public int getNearestDif(int dif, int[] nums) {
Arrays.sort(nums);
int left = 0;
int right = nums.length - 1;
int near = Integer.MAX_VALUE;
int count = 0;
while(true) {
int sum = nums[left] + nums[right];
if(Math.abs(sum - dif) == near) {
count++;
} else if(Math.abs(sum - dif) < near) {
count = 1;
near = Math.abs(sum - dif);
}
if(sum == dif) {
left++;
right--;
} else if(sum < dif) {
left++;
} else {
right--;
}
if(left >= right) {
break;
}
}
return count;
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int test_num = Integer.parseInt(br.readLine());
Main m = new Main();
for(int i = 0; i < test_num; i++) {
String[] input = br.readLine().split(" ");
int num = Integer.parseInt(input[0]);
int dif = Integer.parseInt(input[1]);
int[] nums = new int[num];
input = br.readLine().split(" ");
for(int j = 0; j < num; j++) {
nums[j] = Integer.parseInt(input[j]);
}
bw.write(m.getNearestDif(dif, nums) + "\n");
}
br.close();
bw.flush();
bw.close();
}
}
만약 현재 두 포인터가 있는 위치에서의 두 정수의 합이 주어진 K보다 작다면 왼쪽 포인터를 오른쪽으로 한 칸 이동시킵니다.
만약 현재 두 포인터가 있는 위치에서의 두 정수의 합이 주어진 K보다 크다면 오른쪽 포인터를 왼쪽으로 한 칸 이동시킵니다.
- 만약 현재 두 포인터가 있는 위치에서의 두 정수의 합이 주어진 K와 같다면 왼쪽 포인터는 오른쪽으로 한 칸, 오른쪽 포인터는 왼쪽으로 한 칸 이동시킵니다.