주어준 배열의 요소 3개의 합이 target
과 가장 가까운 값을 구하여라.
모든 인덱스를 비교하는것은 비효율적이므로 타겟에서 점점 멀어지는 부분을 조건처리
-2, -1 < Target < +1, +2 ... (플러스 부분을 조건처리하여 동작하지않게함.)
/**
* @param {number[]} nums
* @param {number} target
* @return {number}
*/
var threeSumClosest = function (nums, target) {
let closetValue = Number.MAX_SAFE_INTEGER
let answer = 0
nums.sort((a, b) => a - b)
for (let i = 0; i < nums.length; i++) {
for (let j = i + 1; j < nums.length; j++) {
for (let k = j + 1; k < nums.length; k++) {
const threeSum = nums[i] + nums[j] + nums[k]
const rest = target - threeSum
if (rest === 0) return target
else if (Math.abs(rest) < closetValue) {
closetValue = Math.abs(rest)
answer = threeSum
}
if (rest < 0 && closetValue < Math.abs(rest)) break
}
}
}
return answer
}