Menu
CoddyTech

Combination Sum

보통백트래킹python iconjava iconcpp iconc iconjs icon+10

서로 다른 양의 정수로 이루어진 candidates 목록과 양의 정수 target이 주어집니다. 각 후보를 원하는 만큼 사용할 수 있을 때, 값의 합이 정확히 target이 되는 모든 조합을 찾으세요. 두 조합에 같은 값이 같은 횟수만큼 포함되어 있으면 같은 조합으로 간주하므로, [2, 3, 3]과 [3, 2, 3]은 한 번만 셉니다.

각 조합은 값을 오름차순으로 정렬해 반환하고, 조합들은 사전순으로 반환하세요. 두 조합을 왼쪽부터 값별로 비교하여 처음으로 다른 위치에서 더 작은 값이 있는 조합을 먼저 둡니다.

함수

combinationSum(candidates: integer-array, target: integer) → integer-2d-array
candidatesinteger-array
사용할 수 있는 서로 다른 값으로, 순서에 상관없이 원하는 만큼 각각 사용할 수 있습니다
targetinteger
모든 조합의 합계가 정확히 도달해야 합니다
반환값integer-2d-array
target의 합이 되는 모든 조합을 오름차순으로 나열하고, 사전순으로 정렬합니다

제약 조건

  • 1 ≤ candidates.length ≤ 50
  • 2 ≤ candidates[i] ≤ 500
  • 2 ≤ target ≤ 500
  • candidates의 모든 값은 서로 다르며, 특정한 순서는 없습니다.
  • 최소 하나의 조합은 target에 도달하며, 최대 150개의 조합이 도달합니다.

예제

입력
candidates = [6, 2, 3]target = 8
출력
[[2, 2, 2, 2], [2, 3, 3], [2, 6]]
설명
2 네 개를 곱하면 8이고, 2 + 3 + 3과 2 + 6도 마찬가지입니다. 세 가지 모두 2로 시작하므로, 두 번째 값이 순서를 정합니다. 2, 그다음 3, 그다음 6입니다. 2가 없으면 3과 6만 남고, 이 둘을 어떻게 조합하든 3의 배수가 되는데, 8은 3의 배수가 아닙니다.

lock icon제출 시 숨은 테스트 +12개

challenge icon

후속 질문

이제 각 후보는 최대 한 번만 사용할 수 있고, candidates에는 중복된 값이 들어 있을 수 있습니다. 조합이 두 번 이상 나타나지 않도록 검색을 어떻게 바꾸면 될까요?

코드 초기화
def combinationSum(candidates, target):
    # 여기에 코드를 작성하세요
테스트 케이스

케이스 1

케이스 2

케이스 3

입력

candidates = [6, 2, 3]
target = 8

기대값

[[2, 2, 2, 2], [2, 3, 3], [2, 6]]