Skip to content

[Leetcode] 40. Combination Sum II ​

#μ‘°ν•©

Problem ​

문제 링크

μ£Όμ–΄μ§„ λ°°μ—΄μ˜ μš”μ†Œλ“€μ„ ν•©ν•˜μ—¬ target의 κ°’μ΄λ˜λŠ” 쑰합을 κ΅¬ν•˜μ—¬ν•˜λŠ” 문제

Solution ​

combination sum μš”μ†Œμ˜ 쀑볡을 λΊ€ 방법

  • ν˜„μž¬ 인덱슀λ₯Ό μΆ”κ°€ν•˜μ§€μ•Šκ³  뎁슀λ₯Ό μ΄μ–΄λ‚˜κ°€λ©΄λœλ‹€.

JS Code ​

js
/**
 * @param {number[]} candidates
 * @param {number} target
 * @return {number[][]}
 */
var combinationSum2 = function (candidates, target) {
  let answer = []
  const dfs = function (comb, sum, curr) {
    if (sum === target) {
      answer.push([...comb])
      return
    }

    for(let nextCurr = curr ; nextCurr < candidates.length; ++nextCurr) {
      if (curr < nextCurr && candidates[nextCurr] === candidates[nextCurr - 1]) continue

      const pick = candidates[nextCurr]
      if (target < sum + pick) break

      comb.push(pick)
      dfs(comb, sum + pick, nextCurr + 1)
      comb.pop()
    }
  }

  candidates.sort((a, b) => a - b)

  dfs([], 0, 0)

  return answer
}