{}연습장
대시보드학습스킬 경로문제모의고사라이브 코테복습데이터
문제 목록〉백트래킹〉상품권 조합 세기← 이전다음 →
#053 · 백트래킹중간DFS / 백트래킹

상품권 조합 세기

문제

지갑에 액면가가 적힌 상품권이 여러 장 들어 있습니다. cards[i]는 i번째 상품권의 액면가입니다.

계산대에서 상품권을 정확히 k장 내밀어 합계가 정확히 target이 되게 하려고 합니다. 가능한 조합이 몇 가지인지 반환하세요.

  • 같은 상품권을 두 번 낼 수는 없습니다 (한 장은 한 번만 사용).
  • 액면가가 같은 상품권이 여러 장 있을 수 있으며, 이들은 서로 다른 장으로 구분합니다. 예를 들어 [9,9,9]에서 2장을 고르는 방법은 3가지입니다.
  • 내미는 순서는 구분하지 않습니다.
function solution(cards: number[], k: number, target: number): number

예시

cards k target 반환 설명
[2,3,3,5,7] 2 8 2 3+5 조합이 3의 장수만큼 두 가지
[1,4,6,2,5] 3 11 2 1+4+6, 4+2+5
[9,9,9] 2 18 3 같은 액면가도 다른 장으로 구분
[1,2,3] 4 6 0 장수가 모자람

제약 조건

  • 1 ≤ cards.length ≤ 20
  • 1 ≤ cards[i] ≤ 100
  • 1 ≤ k ≤ 20 (cards.length보다 클 수 있습니다)
  • 1 ≤ target ≤ 2,000

시간 복잡도 목표: O(2^N) 이내 — 가지치기를 곁들인 조합 탐색

테스트 케이스

예시 1: 3+5 조합이 두 가지 → 2
입력: cards = [2,3,3,5,7], k = 2, target = 8
출력: 2
예시 2: 1+4+6, 4+2+5 → 2
입력: cards = [1,4,6,2,5], k = 3, target = 11
출력: 2
예시 3: 같은 액면가를 다른 장으로 구분 → 3
입력: cards = [9,9,9], k = 2, target = 18
출력: 3
예시 4: 장수 부족 → 0
입력: cards = [1,2,3], k = 4, target = 6
출력: 0
한 장만 내미는 경우 → 1
입력: cards = [10,20,30], k = 1, target = 20
출력: 1
네 장 중 세 장 고르기 → 4
입력: cards = [4,4,4,4], k = 3, target = 12
출력: 4
5+1+3, 1+2+6, 2+3+4 → 3
입력: cards = [5,1,3,2,4,6], k = 3, target = 9
출력: 3
엣지: 한 장뿐이고 합이 맞지 않음 → 0
입력: cards = [7], k = 1, target = 8
출력: 0
solution.ts
에디터 로딩 중…

▶ 실행은 기록 없이 채점만, 제출은 결과가 진행률·오답노트에 기록됩니다.