|
| 1 | +/** |
| 2 | +๋ฐฑํธ๋ํน(backtracking)์ ์ด์ฉํ ํ์ด |
| 3 | +
|
| 4 | +candidates ๋ฐฐ์ด์ด ์์ฐจ ์ ๋ ฌ์ ์ํด ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ค. |
| 5 | +ํจ์ ํ๋ผ๋ฏธํฐ๋ backtracking(๋จ์ ์, ํ์ฌ push๋ ๋ฐฐ์ด, ํ์ํ ์ธ๋ฑ์ค)๋ฅผ ๋ฐ๋๋ค. |
| 6 | +
|
| 7 | +๋์ ์๋ฆฌ |
| 8 | +1. candidates์ ์์ ์์๋ถํฐ ํ๋์ฉ pushํ๊ณ , ํด๋น ์์๋ฅผ target์์ ์ฐจ๊ฐํ๋ค โ remains |
| 9 | +2. dfs ๋ฐฉ์์ผ๋ก ์ฌ๊ท์ ์ผ๋ก ํธ์ถํ์ฌ remains๊ฐ 0์ด ๋๋ฉด ์ต์ข
result ๋ฐฐ์ด์ push๋๋ค. |
| 10 | +3. ์ฌ๊ธฐ์ breakpoint๋ ํ์ ์ธ๋ฑ์ค์ ๊ฐ์ด remains๋ณด๋ค ํฐ ๊ฒฝ์ฐ์ด๋ค. |
| 11 | +4. ๊ฐ์ฅ ํต์ฌ์ธ ๋ถ๋ถ์ ์๋ณธ ๋ฐฐ์ด์ find_number/remains๋ฅผ ์กฐํฉํ ์ ์์ผ๋ฉด pop()์ ํธ์ถฃํ๋๋ฐ, |
| 12 | +์ด๋ ์งํ์ค์ธ ๋จ๊ณ์์ ๋ ์ด์์ ์กฐํฉ์ ์ฐพ์ง ๋ชปํด์ ๋ค์ ์กฐํฉ์ ์ฐพ๊ธฐ ์ํ ํ์ ๊ณผ์ ์ด๋ค. |
| 13 | + */ |
| 14 | +/** |
| 15 | + * @param {number[]} candidates |
| 16 | + * @param {number} target |
| 17 | + * @return {number[][]} |
| 18 | + */ |
| 19 | +function combinationSum(candidates, target) { |
| 20 | + let result = []; |
| 21 | + |
| 22 | + candidates.sort((a, b) => a - b); |
| 23 | + |
| 24 | + function backtracking(remains, current, index) { |
| 25 | + if (remains === 0) { |
| 26 | + result.push([...current]); |
| 27 | + } |
| 28 | + |
| 29 | + for (let i = index; i < candidates.length; i++) { |
| 30 | + let find_number = remains - candidates[i]; |
| 31 | + |
| 32 | + if (candidates[i] > remains) break; |
| 33 | + |
| 34 | + current.push(candidates[i]); |
| 35 | + backtracking(find_number, current, i); |
| 36 | + current.pop(); |
| 37 | + } |
| 38 | + } |
| 39 | + |
| 40 | + backtracking(target, [], 0); |
| 41 | + |
| 42 | + return result; |
| 43 | +} |
0 commit comments