[Leetcode] 39. Combination Sum β
#μ‘°ν©, #DFS
Problem β
ν보리μ€νΈμμ μ€λ³΅μ νμ©νμ¬ ν©νμ λ target
μ΄ λμ€λ κ²½μ°λ₯Ό ꡬνλ€.
Solution β
DFSλ₯Ό μ΄μ©νμ¬ λ°°μ΄μ μμλλ‘ depthλ‘ λ€μ΄κ°λ€. κΉμ λμ€λ‘ μ΄λ νλ©΄μ ν΄λΉ μΈλ±μ€μ κ°μ λνκ³ , κ·Έ κ°μ΄ targetκ³Ό μΌμΉνλ©΄ μ μ₯, μ΄κ³Όνλ©΄ ν¨μλ₯Ό 리ν΄μμΌ λμ΄μ κΉμ λμ€λ‘ μ§μ νλ κ²μ λ©μΆλ€.
λ°λ³΅λ¬Έμ μ΄μ©νμ¬ λͺ¨λ κ²½μ°μ μμ λν κ³μ°μ μ§ννλ€.
DFSλ₯Ό μ΄μ©ν TS Code β
ts
function combinationSum(candidates: number[], target: number): number[][] {
let answer:number[][] = []
const DFS = (sum: number, pack: number[], idx: number) => {
if (target === sum) {
answer.push([...pack])
return
}
if (target < sum) return
for(let i = idx; i < candidates.length; i++) {
const candidate = candidates[i]
DFS(
sum + candidate,
[...pack, candidate],
i
)
}
}
DFS(0, [], 0)
return answer
};
Combination μκ³ λ¦¬μ¦μ μ΄μ©ν JS Code β
javascript
/**
* @param {number[]} candidates
* @param {number} target
* @return {number[][]}
*/
var combinationSum = function (candidates, target) {
let answer = []
function doCombination(idx, pickeds) {
const sum = pickeds.reduce((acc, cur) => acc + cur, 0)
if (target < sum) return
if (target === sum) {
answer.push([...pickeds])
return
}
for (let i = idx; i < candidates.length; i++) {
pickeds.push(candidates[i])
doCombination(i, pickeds)
pickeds.pop()
}
}
doCombination(0, [])
return answer
}