구해야 할 두 값의 합이 0에 가까운 두 원소를 구하는 것이다. 10만개 정도면 Scanner써도 될것 같았는데 근데 희안하게 이문제만 BufferedReader로 푼사람이 없고 Scanner로 쓴 분들이 많아서 더 의심을 안했음 진짜 왜맞틀.... 이었으나 정말 이부분이 문제였다..
아무튼 이 문제는 투포인터로 풀어야하는데 생각보다 좀 귀찮은 문제였다. 원소를 처음부터 끝까지 비교를 해야하는데 일단 정렬을 미리해두어야 나중에 출력할때 번거롭지 않다.
원소 인덱스를 기준으로 잡아서 투포인터를 해야한다
Arrays.sort(arr);
// 가장 작은 값의 인덱스 0
// 가장 큰 값의 인덱스 n - 1
int min = 0, max = n - 1, hap = Integer.MAX_VALUE;
while (min < max) {
// 현재 혼합 용액의 특성값
int mid = Math.abs(arr[min] + arr[max]);
// 혼합 용액 특성 값이 더 작으면
if (hap > mid) {
hap = mid;
answer[0] = arr[min];
answer[1] = arr[max];
// 0이 되면 가장 최소값이라 탈출
if (mid == 0) {
break;
}
}
// 더했을때 0보다 작으면 더 큰 값을 대입해야 하므로 min + 1을 한다
if (arr[min] + arr[max] < 0) {
min += 1;
} else {
max -= 1;
}
}