|
| 1 | +class Solution: |
| 2 | + # DFS๋ก ๋ฌธ์ ๋ฅผ ํผ๋ค. ๋จ, ๊ฐ์ง์น๊ธฐ ํ์. |
| 3 | + # ์ด ๋ ๊ฐ์ง์น๊ธฐ๋ฅผ ํ๊ธฐ ์ํด candidates์ ๋จผ์ ์ค๋ฆ์ฐจ์์ผ๋ก sorting์ ํ๊ณ (๊ฐ ์์๋ uniqueํ ์ซ์) |
| 4 | + # ์ค์ target ์ซ์์ ์ง๊ธ๊น์ง ์ ์ฅํด๋ target_list์ ํฉ์ ๋์ ๋น๊ต๋ฅผ ํ๋ฉฐ ๊น์ด ํ์์ ๋ ํ ์ง ๋ง์ง ๊ฒฐ์ ํ๋ค. |
| 5 | + def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]: |
| 6 | + results = [] |
| 7 | + |
| 8 | + # candidates๋ฅผ ๋จผ์ sorting(๋ฌธ์ ์กฐ๊ฑด์ sort๊ฐ ๋์ด ์๋ค๋ ์ ์ด ์์) |
| 9 | + candidates.sort() |
| 10 | + len_candidates = len(candidates) |
| 11 | + |
| 12 | + # ๊น์ด ์ฐ์ ํ์ ํจ์ |
| 13 | + def dfs(target_list, start_i): |
| 14 | + for i in range(start_i, len_candidates): |
| 15 | + if sum(target_list) == target: |
| 16 | + # target_list๋ฅผ results์ ๋ฃ์ด์ค๋ค. |
| 17 | + # target_list๋ ๋ฆฌ์คํธ ๊ฐ์ฒด์ด๋ฏ๋ก deepcopy๋ฅผ ํด์ ๋ฃ์ด์ค์ผ ํจ |
| 18 | + # ์ด ์ด์ ํ์ํด๋ดค์ target๋ณด๋ค ํฐ ๊ฐ์ด ๋์ค๊ธฐ ๋๋ฌธ์ ํ์์ ๋ง์น๋ค. |
| 19 | + results.append(target_list[:]) |
| 20 | + return |
| 21 | + |
| 22 | + if sum(target_list) + candidates[i] > target: |
| 23 | + # ์ง๊ธ๊น์ง ์์์จ target_list์ ์ ์ฒด ํฉ๊ณผ ํ์ฌ ์ธ๋ฑ์ค์ ๊ฐ์ ๋ํ ๊ฒ์ด |
| 24 | + # target๋ณด๋ค ํฌ๋ฉด ๋์ด์ ํ์ํ์ง ์์๋ ๋๋ค(๋ค์ ์๋ index์ ๊ฐ๋ ๋ค ๋ฌด์กฐ๊ฑด ์ปค์ง) |
| 25 | + # ๋ฐ๋ผ์ ํ์์ ๋ง์น๊ธฐ ์ํด returnํ๋ค. |
| 26 | + return |
| 27 | + |
| 28 | + # ํ์์ ๊ณ์ํด์ผ ํ๋ ๊ฒฝ์ฐ์๋ target_list์ candidate[i]์ ๊ฐ์ ๋ฃ์ด์ค ํ |
| 29 | + # ๊ทธ ๋ค์ ๊น์ด ํ์์ ํ๋ค. |
| 30 | + # i๋ฒ์งธ ์๋ณด๋ค ์์ ์๋ฅผ ํ์ํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋ค์ ํ์์ start_i๋ก ํ ์์ ์ i๋ฅผ ๋ฃ์ด์ค๋ค. |
| 31 | + target_list.append(candidates[i]) |
| 32 | + dfs(target_list, i) |
| 33 | + |
| 34 | + # ํ์์ ๋๋ด๊ณ ์ค๋ฉด pop |
| 35 | + target_list.pop() |
| 36 | + |
| 37 | + # ๊น์ด ์ฐ์ ํ์ ์์ |
| 38 | + dfs([], 0) |
| 39 | + |
| 40 | + return results |
0 commit comments