작심삼일

[LeetCode] 39 | Combination Sum | Python 본문

스터디/코테

[LeetCode] 39 | Combination Sum | Python

yun_s 2022. 2. 17. 16:20
728x90
반응형

문제 링크: https://leetcode.com/problems/combination-sum/


문제

Given an array of distinct integers candidates and a target integer target, return a list of all unique combinations of candidates where the chosen numbers sum to target. You may return the combinations in any order.

The same number may be chosen from candidates an unlimited number of times. Two combinations are unique if the frequency of at least one of the chosen numbers is different.

It is guaranteed that the number of unique combinations that sum up to target is less than 150 combinations for the given input.


조건

  • 1 <= candidates.length <= 30
  • 1 <= candidates[i] <= 200
  • All elements of candidates are distinct.
  • 1 <= target <= 500

내 풀이

candidates중에 target보다 큰 것을 제외한 후 내림차순으로 정렬한다.


그 후, 맨 앞에서부터 차례로 더해보는 make_comb라는 함수를 이용해 문제를 풀었다.

comb 내의 합이 7이니 정답에 추가


6으로 시작하는 comb들로는 합을 7로 만들 수 없다.


3으로 시작하는 comb중에서는 [3, 2, 2]의 합이 7이 된다.


 

이를 반복하면 된다.


코드

class Solution:
    def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]:
        self.candidates = sorted(list(filter(lambda x: x <= target, candidates)), reverse=True)
        self.target = target
        self.N = len(self.candidates)
        self.ans = []
        
        if self.N == 0:
            return []
        
        self.make_comb(0, 0, [])
        
        return self.ans
        
    def make_comb(self, start, cur_sum, comb):
        for n in range(start, self.N):
            if cur_sum + self.candidates[n] < self.target:
                comb.append(self.candidates[n])
                self.make_comb(n, cur_sum+self.candidates[n], comb)
                del comb[-1]
            elif cur_sum + self.candidates[n] > self.target:
                continue
            elif cur_sum + self.candidates[n] == self.target:
                comb.append(self.candidates[n])
                self.ans.append(comb[:])
                del comb[-1]
728x90
반응형
Comments