|
| 1 | +class Solution: |
| 2 | + def combinationSum(self, candidates: list[int], target: int) -> list[list[int]]: |
| 3 | + """ |
| 4 | + ์ฃผ์ด์ง ์ซ์ ๋ชฉ๋ก์์ ๋ชฉํํ๋ ํฉ์ ๋ง๋ค ์ ์๋ ์กฐํฉ์ ์ฐพ๋ ํจ์ |
| 5 | + ์ซ์๋ ๋์ผ ์ซ์๋ฅผ ์ฌ๋ฌ๋ฒ ์ฌ์ฉํด๋ ๋จ |
| 6 | +
|
| 7 | + ๋ฐฉ๋ฒ: |
| 8 | + DFS ๋ฐฉ์์ ์ฌ์ฉํจ. |
| 9 | + - ํ์ฌ ์ธ๋ฑ์ค๋ฅผ ๊ธฐ์ค์ผ๋ก, |
| 10 | + (์ ํ์ง) |
| 11 | + ํ์ฌ ์์น์ ์ซ์๊ฐ์ ํ์ฌ ์กฐํฉ์ ํฌํจํ ์ง |
| 12 | + - ํ์ฌ ํฉ์ ๋ง๋ค๊ธฐ ์ํด ๋จ์ ๊ฐ - ํ์ฌ ๊ฐ์ด 0 ์ด์์ด๋ฉด ํฌํจ ๊ฐ๋ฅ |
| 13 | + - ํ์ฌ ๊ฐ์ ์ฌ๋ฌ๋ฒ ์ธ ์ ์๊ธฐ์ ์ธ๋ฑ์ค๋ฅผ ๋๋ฆฌ์ง x |
| 14 | + ํ์ฌ ์์น์ ์ซ์๊ฐ์ ํ์ฌ ์กฐํฉ์ ํฌํจํ์ง ์์์ง |
| 15 | + - ์ด ์ธ๋ฑ์ค๊ฐ ๋ชฉ๋ก๊ธธ์ด๋ฅผ ๋์ด๊ฐ๋ฉด ์๋จ |
| 16 | + - ํฉ์ ๋๋จธ์ง ๊ฐ์ด 0์ด๋ฉด ๋ชฉํ์ ๋๋ฌํ๊ฒ -> ์กฐํฉ ๋ชฉ๋ก์ ํฌํจ |
| 17 | +
|
| 18 | + Args: |
| 19 | + candidates (list[int]): ์ฌ์ฉ๊ฐ๋ฅํ ์ซ์ ๋ชฉ๋ก. unique |
| 20 | + target (int): ๋ชฉํํ๋ ํฉ |
| 21 | + |
| 22 | + Returns: |
| 23 | + list[list[int]]: ๋ชฉํํ๋ ํฉ์ ๋ง๋ค ์ ์๋ ๊ฐ๋ฅํ ์ซ์ ์กฐํฉ. unique |
| 24 | + """ |
| 25 | + combinations = list() |
| 26 | + def getCombination(idx, remain, path): |
| 27 | + """ |
| 28 | + ํ์ฌ ํจ์์์ ์ฌ๊ท๋ฅผ ์ํ helper ํจ์ |
| 29 | + """ |
| 30 | + if remain == 0: |
| 31 | + combinations.append(path) |
| 32 | + return |
| 33 | + if idx < len(candidates): |
| 34 | + curr = candidates[idx] |
| 35 | + if remain - curr >= 0: |
| 36 | + getCombination(idx, remain - curr, path + [curr]) |
| 37 | + getCombination(idx + 1, remain, path) |
| 38 | + return |
| 39 | + getCombination(0, target, []) |
| 40 | + return combinations |
0 commit comments