1+ #์ด ๋ฌธ์ ๋ 1)ํ์ฌ ํฉ์ด target๊ณผ ๊ฐ์ผ๋ฉด ๊ฒฐ๊ณผ์ ์ถ๊ฐ ํ ๋๋์๊ฐ, 2) ํ์ฌ ํฉ์ด target์ ์ด๊ณผํ๋ฉด ๋ ์ด์ ์งํํ์ง ์๊ณ ๋๋์๊ฐ,
2+ #3) ๊ฐ candidate์ ๋ํด recursiveํ๊ฒ ์๋
3+
4+ class Solution :
5+ def combinationSum (self , candidates : List [int ], target : int ):
6+ #๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ ๋ฆฌ์คํธ
7+ result = []
8+
9+ #start: ํ์ฌ ์ ํํ ์ ์๋ candidate์ ์์ ์ธ๋ฑ์ค
10+ #current: ํ์ฌ๊น์ง ์ ํํ ์ซ์๋ค์ ๋ฆฌ์คํธ
11+ #current_sum: ํ์ฌ๊น์ง ์ ํํ ์ซ์๋ค์ ํฉ
12+ def backtrack (start , current , current_sum ):
13+ #ํ์ฌ ํฉ์ด target๊ณผ ๊ฐ์ผ๋ฉด ํ์ฌ ์กฐํฉ์ ๊ฒฐ๊ณผ์ ์ถ๊ฐ ํ ๋๋์๊ฐ
14+ if current_sum == target :
15+ result .append (current .copy ())
16+ return
17+ #ํ์ฌ ํฉ์ด target์ ์ด๊ณผํ๋ฉด ๋ ์ด์ ์งํํ์ง ์๊ณ ๋๋์๊ฐ
18+ if current_sum > target :
19+ return
20+
21+ #start ํ๋ผ๋ฏธํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ค๋ณต ์กฐํฉ์ด ์๊ธฐ์ง ์๋๋ก ์ด์ ์ ์ ํํ ์ซ์๋ถํฐ ๋ค์ ์์
22+ for i in range (start , len (candidates )):
23+ #ํ์ฌ candidate ์ ํ
24+ current .append (candidates [i ])
25+ #recursive ํธ์ถ : i๋ฅผ ๊ทธ๋๋ก ์ ๋ฌํ์ฌ ๊ฐ์ ์ซ์๋ฅผ ๋ฌดํ๋ฐ๋ณตํ์ฌ ์ฌ์ฉํ ์ ์์.
26+ backtrack (i , current , current_sum + candidates [i ])
27+ #๋ง์ง๋ง์ ์ ํํ ์ซ์ ์ ๊ฑฐ
28+ current .pop ()
29+
30+ #๋ฐฑํธ๋ํน ์์
31+ backtrack (0 , [], 0 )
32+ #๋ชจ๋ ๊ฐ๋ฅํ ์กฐํฉ ๋ฐํ
33+ return result
34+
35+
36+ # ํ
์คํธ ์ผ์ด์ค
37+ solution = Solution ()
38+
39+ # ํ
์คํธ 1
40+ test1_candidates = [2 ,3 ,6 ,7 ]
41+ test1_target = 7
42+ print (f"Expected: [[2,2,3],[7]]" )
43+ print (f"Result: { solution .combinationSum (test1_candidates , test1_target )} " )
44+
45+ # ํ
์คํธ 2
46+ test2_candidates = [2 ,3 ,5 ]
47+ test2_target = 8
48+ print (f"Expected: [[2,2,2,2],[2,3,3],[3,5]]" )
49+ print (f"Result: { solution .combinationSum (test2_candidates , test2_target )} " )
50+
51+ # ํ
์คํธ 3
52+ test3_candidates = [2 ]
53+ test3_target =
54+ print (f"Expected: []" )
55+ print (f"Result: { solution .combinationSum (test3_candidates , test3_target )} " )
56+
57+
58+ #์๊ฐ ๋ณต์ก๋: O(2^target)
59+ #๊ฐ ๋จ๊ณ์์ ์ซ์๋ฅผ ์ ํํ๊ฑฐ๋ ์ ํํ์ง ์๋ ๋ ๊ฐ์ง ์ ํ์ง๊ฐ ์์
60+ #์ต์
์ ๊ฒฝ์ฐ, target์ ๋ง๋ค๊ธฐ ์ํด ๋ชจ๋ ๊ฐ๋ฅํ ์กฐํฉ์ ์๋ํด์ผ ํจ.
61+ #์๋ฅผ ๋ค์ด candidates = [1], target = 10์ผ ๋:
62+ #[1,1,1,1,1,1,1,1,1,1]๊น์ง ์๋ํด์ผ ํจ
63+ #์ด๋ 2^10์ ๊ฐ๊น์ด ๊ฒฝ์ฐ์ ์๊ฐ ๋ฐ์
64+ #๊ณต๊ฐ ๋ณต์ก๋: O(target)
65+ #๊ฐ ์ฌ๊ท ํธ์ถ๋ง๋ค ์๋ก์ด ์คํ ํ๋ ์์ด ์์ฑ๋จ
66+ #์ต๋ ๊น์ด๋ target์ ๊ฐ์ฅ ์์ ์ซ์๋ก ๋๋ ๊ฐ์
67+ #์๋ฅผ ๋ค์ด target = 7, ๋ฆฌ์คํธ ๋ด ๊ฐ์ฅ ์์ ์ซ์ = 2์ผ ๋
68+ #7/2 = 3.5 โ ์ต๋ 3๋ฒ์ ์ฌ๊ท ํธ์ถ
69+ #[2,2,3]์ ๋ง๋ค ๋ 3๋ฒ์ ์ฌ๊ท ํธ์ถ
70+ #๊ณต๊ฐ ๋ณต์ก๋๋ target ๊ฐ์ ๋น๋กํ์ฌ ์ฆ๊ฐํ๋ฏ๋ก O(target)์
71+ #์ด๋ target์ด ์ปค์ง์๋ก ๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ์ํ๋ค๋ ๊ฒ์ ์๋ฏธํจ
0 commit comments