Skip to content

Commit e1073f9

Browse files
committed
week 3 - combination-sum
1 parent e1d0070 commit e1073f9

File tree

1 file changed

+40
-0
lines changed

1 file changed

+40
-0
lines changed
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
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

Comments
ย (0)