16. 3Sum Closest
in Coding Interview on Array, Two Pointers
타겟에 가장 가까운 세 정수의 합
배열에서 3개의 숫자를 처리해야 하는 경우 정렬 후에 처음부터 루프를 돌면서 두개의 숫자를 Two Pointers 로 증감시키면서 처리한다.
class Solution {
// Two Pointer & Sliding Window
// 타겟에 가장 가까운 세 정수의 합
public int threeSumClosest(int[] nums, int target) {
// 초기값
int result = nums[0] + nums[1] + nums[nums.length - 1];
Arrays.sort(nums);
for (int i = 0; i < nums.length - 2; i++) {
// Two Pointer
int start = i + 1, end = nums.length - 1;
while (start < end) {
int sum = nums[i] + nums[start] + nums[end];
// 결과값이 타켓과 더 가까우면(차이값의 절대값이 작으면) 갱신한다.
if (Math.abs(sum - target) < Math.abs(result - target)) {
result = sum;
}
if (sum > target) end--;
else if (sum < target) start++;
else return result;
}
}
return result;
}
}