Skip to content

[Leetcode] 16. 3Sum Closest โ€‹

Problem โ€‹

๋ฌธ์ œ ๋งํฌ

์ฃผ์–ด์ค€ ๋ฐฐ์—ด์˜ ์š”์†Œ 3๊ฐœ์˜ ํ•ฉ์ด target๊ณผ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ฐ’์„ ๊ตฌํ•˜์—ฌ๋ผ.

Solution โ€‹

  1. ์ •๋ ฌ์„ํ•˜์—ฌ ์ธ๋ฑ์Šค๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์ ‘๊ทผํ–ˆ์„๋•Œ ์˜ค๋ฆ„์ฐจ์ˆœ์ด ๋‚˜์˜ค๋„๋ก ์œ ๋„ํ•œ๋‹ค.
  2. ๋ฐ˜๋ณต๋ฌธ์„ ์ด์šฉํ•ด์„œ ์ธ๋ฑ์Šค๋ฅผ ์ ‘๊ทผํ•œ๋‹ค.
  3. ๋ชจ๋‘ ๋”ํ•œ ๊ฐ’์„ ํƒ€๊ฒŸ์ˆซ์ž์—์„œ ๋นผ์„œ ๋‚จ์€ ์ˆซ์ž์˜ ์ ˆ๋Œ€๊ฐ’์œผ๋กœ ํƒ€๊ฒŸ๊ณผ์˜ ๊ฑฐ๋ฆฌ๋ฅผ ์•Œ์•„๋‚ธ๋‹ค.
  4. ๊ฑฐ๋ฆฌ๋ฅผ ๋น„๊ตํ•˜๋ฉฐ ์ž‘์€ ๊ฐ’์„ ์ €์žฅํ•œ๋‹ค.

๋ชจ๋“  ์ธ๋ฑ์Šค๋ฅผ ๋น„๊ตํ•˜๋Š”๊ฒƒ์€ ๋น„ํšจ์œจ์ ์ด๋ฏ€๋กœ ํƒ€๊ฒŸ์—์„œ ์ ์  ๋ฉ€์–ด์ง€๋Š” ๋ถ€๋ถ„์„ ์กฐ๊ฑด์ฒ˜๋ฆฌ
-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
}