[Leetcode] 16. 3Sum Closest โ
Problem โ
์ฃผ์ด์ค ๋ฐฐ์ด์ ์์ 3๊ฐ์ ํฉ์ด target
๊ณผ ๊ฐ์ฅ ๊ฐ๊น์ด ๊ฐ์ ๊ตฌํ์ฌ๋ผ.
Solution โ
- ์ ๋ ฌ์ํ์ฌ ์ธ๋ฑ์ค๋ฅผ ์์ฐจ์ ์ผ๋ก ์ ๊ทผํ์๋ ์ค๋ฆ์ฐจ์์ด ๋์ค๋๋ก ์ ๋ํ๋ค.
- ๋ฐ๋ณต๋ฌธ์ ์ด์ฉํด์ ์ธ๋ฑ์ค๋ฅผ ์ ๊ทผํ๋ค.
- ๋ชจ๋ ๋ํ ๊ฐ์ ํ๊ฒ์ซ์์์ ๋นผ์ ๋จ์ ์ซ์์ ์ ๋๊ฐ์ผ๋ก ํ๊ฒ๊ณผ์ ๊ฑฐ๋ฆฌ๋ฅผ ์์๋ธ๋ค.
- ๊ฑฐ๋ฆฌ๋ฅผ ๋น๊ตํ๋ฉฐ ์์ ๊ฐ์ ์ ์ฅํ๋ค.
๋ชจ๋ ์ธ๋ฑ์ค๋ฅผ ๋น๊ตํ๋๊ฒ์ ๋นํจ์จ์ ์ด๋ฏ๋ก ํ๊ฒ์์ ์ ์ ๋ฉ์ด์ง๋ ๋ถ๋ถ์ ์กฐ๊ฑด์ฒ๋ฆฌ
-2, -1 < Target < +1, +2 ... (ํ๋ฌ์ค ๋ถ๋ถ์ ์กฐ๊ฑด์ฒ๋ฆฌํ์ฌ ๋์ํ์ง์๊ฒํจ.)
JS CODE โ
javascript
/**
* @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
}