< All posts

39. Combination Sum

๋ฌธ์ œ ์„ค๋ช…

์ˆซ์ž๋“ค์ด ์ฃผ์–ด์ง€๋ฉด ๊ทธ ์ˆซ์ž๋“ค์˜ ํ•ฉ์ด ํƒ€๊ฒŸ ์ˆซ์ž๊ฐ€ ๋˜๋Š” ๋ชจ๋“  ์กฐํ•ฉ์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฌธ์ œ๋‹ค.

39

ํ’€์ด ๋ฐ ํ•ด์„ค

์ด ๋ฌธ์ œ๋Š” ๋ฐฑํŠธ๋ž˜ํ‚น(Backtracking) ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฃผ์–ด์ง„ ์ˆซ์ž๋“ค๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ์กฐํ•ฉ์„ ์žฌ๊ท€์ ์œผ๋กœ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

  • ๋ฐฑํŠธ๋ž˜ํ‚น ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•˜์—ฌ ์žฌ๊ท€์ ์œผ๋กœ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์กฐํ•ฉ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • ๊ธฐ๋ณธ ์‚ฌ๋ก€๋กœ, ํ˜„์žฌ ํ•ฉ์ด ํƒ€๊ฒŸ ์ˆซ์ž์™€ ๊ฐ™์•„์ง€๋ฉด ํ˜„์žฌ ๊ฒฝ๋กœ๋ฅผ ๊ฒฐ๊ณผ ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  • ์žฌ๊ท€ ๋‹จ๊ณ„์—์„œ๋Š” ์ฃผ์–ด์ง„ ์ˆซ์ž๋“ค ์ค‘์—์„œ ๊ฐ ์ˆซ์ž๋ฅผ ๊ฒฝ๋กœ์— ์ถ”๊ฐ€ํ•˜๊ณ  ์žฌ๊ท€์ ์œผ๋กœ ๋‹ค์Œ ์ˆซ์ž๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  • ์ตœ์ข…์ ์œผ๋กœ ๋ชจ๋“  ๊ฐ€๋Šฅํ•œ ์กฐํ•ฉ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

ํ•ต์‹ฌ: ๊ธฐ์–ตํ•ด์•ผ ํ•  ์ •๋ณด๋ฅผ ๋ฐฑํŠธ๋ž˜ํ‚น ํ•จ์ˆ˜์— ์ „๋‹ฌํ•˜์—ฌ ํƒ€๊ฒŸ๊นŒ์ง€ ๋„๋‹ฌํ•˜๋Š” ์กฐํ•ฉ์„ ์ฐพ๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.

class Solution:
    def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]:
        res = []

        def backtrack(idx, curr_comb, curr_sum):
            if curr_sum==target:
                res.append(curr_comb[:])
                return
            
            if idx==len(candidates) or curr_sum > target:
                return
            
            backtrack(idx, curr_comb+[candidates[idx]], curr_sum+candidates[idx])
            backtrack(idx+1, curr_comb, curr_sum)
        
        backtrack(0,[],0)
        return res

๋ณต์žก๋„

c

์‹œ๊ฐ„๋ณต์žก๋„

  • O(N^(T/M + 1)) ; N์€ candidates์˜ ๊ธธ์ด, T๋Š” target, M์€ candidates์˜ ์ตœ์†Ÿ๊ฐ’์ž…๋‹ˆ๋‹ค. ์ตœ์•…์˜ ๊ฒฝ์šฐ, ๊ฐ ์žฌ๊ท€ ํ˜ธ์ถœ์—์„œ N๊ฐœ์˜ ์„ ํƒ์ง€๊ฐ€ ์žˆ์œผ๋ฉฐ, ์ตœ๋Œ€ ๊นŠ์ด๋Š” T/M์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ณต๊ฐ„๋ณต์žก๋„

  • O(k) ; ์žฌ๊ท€ ํ˜ธ์ถœ ์Šคํƒ๊ณผ ๋ฐฉ๋ฌธ ์ง‘ํ•ฉ์— ์‚ฌ์šฉ๋˜๋Š” ๊ณต๊ฐ„์ž…๋‹ˆ๋‹ค.

Constraint Analysis

Constraints:
1 <= candidates.length <= 30
2 <= candidates[i] <= 40
All elements of candidates are distinct.
1 <= target <= 40

References

ยฉ 2025 HyunJoon Sung. All Rights Reserved.

GitHub