문제 4528 · 킬로 V
보관함에서 만드는 정시 재생목록
| 시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
|---|---|---|---|---|---|
| 1000ms / 테스트 (언어별 보정은 아래 표) | 메모리: 측정하지 않음(브라우저 채점) | 0 | 0 | 0 | 0.00% |
문제
음악 스트리밍 서비스에서 사용자가 보관함의 곡을 골라 정해진 시간에 끝나는 재생목록을 만들려고 한다. 보관함에는 N개의 곡이 있으며, 각 곡에는 등록된 순서대로 1번부터 N번까지 번호가 붙어 있다. i번 곡의 재생 시간은 A_i초다. 재생 시간은 모두 양의 정수이며, 곡 사이에 대기 시간이나 별도의 안내 음성은 없다. 사용자는 정확히 K개의 곡을 선택하고, 선택한 곡의 재생 시간 합을 정확히 T초로 맞추려 한다. 각 곡은 선택하지 않거나 한 번만 선택할 수 있다. 곡의 일부만 재생하거나 재생 속도를 바꾸는 것은 허용하지 않는다. 따라서 선택한 곡들의 재생 시간을 그대로 더한 값이 재생목록의 전체 길이가 된다. 선택한 곡은 반드시 보관함의 번호가 작은 순서대로 재생한다. 사용자가 곡의 순서를 따로 바꾸는 경우는 세지 않는다. 두 재생목록에서 선택한 곡 번호의 집합이 다르면 서로 다른 재생목록이다. 재생 시간이 같은 곡이라도 번호가 다르면 별개의 곡이므로, 어느 번호를 골랐는지에 따라 서로 다른 재생목록이 될 수 있다. 반대로 선택한 번호가 모두 같다면 같은 재생목록이다. K가 0일 수도 있다. 이때 선택한 곡이 없는 빈 재생목록의 전체 길이는 0초이며, 빈 재생목록은 하나만 존재한다. 곡을 하나라도 선택하면 전체 길이는 양수다. 목표 시간에 가까운 재생목록이나 곡 수가 다른 재생목록은 조건을 만족하지 않는다. 보관함의 정보와 K, T가 주어질 때, 두 조건을 모두 만족하는 서로 다른 재생목록의 개수를 구한다. 가능한 재생목록을 직접 출력할 필요는 없으며, 조건을 만족하는 재생목록이 하나도 없으면 개수는 0이다.
입력
첫째 줄에 정수 N, K, T가 공백으로 구분되어 주어진다. 1 ≤ N ≤ 20, 0 ≤ K ≤ N, 0 ≤ T ≤ 20,000,000이다. 둘째 줄에 각 곡의 재생 시간 A_1, A_2, …, A_N이 공백으로 구분되어 주어진다. 모든 A_i는 정수이며 1 ≤ A_i ≤ 1,000,000이다.
출력
정확히 K개의 곡을 선택하고 재생 시간 합이 정확히 T초인 서로 다른 재생목록의 개수를 정수 하나로 출력한다. 조건을 만족하는 재생목록이 없으면 0을 출력한다.
예제 입력 1
5 2 5 2 3 2 5 3
예제 출력 1
4
예제 입력 2
3 0 0 8 8 8
예제 출력 2
1
예제 입력 3
4 2 7 4 4 4 4
예제 출력 3
0
힌트 펼치기
- 각 곡을 선택하는 경우와 선택하지 않는 경우로 나누어 재귀적으로 탐색한다.
- 앞으로 남은 곡 수가 필요한 곡 수보다 적거나, 남은 곡의 재생 시간 합이 필요한 시간보다 작으면 탐색을 멈출 수 있다.
관련 서재 장
알고리즘 분류
재귀백트래킹완전 탐색풀이 작성
연습 채점은 공개 테스트로 실행합니다. 인증 제출은 코드를 봉인한 뒤 새 입력을 실행하고 서버에서 출력을 대조하며 코드와 판정을 저장합니다.
풀이를 제출하면 여기에서 결과를 확인할 수 있습니다.
연습 기록은 이 브라우저에 최근 50개를 저장합니다. 인증 기록은 내 제출에서 확인하세요.
이 브라우저의 연습 기록
언어별 제한
테스트 케이스마다 새 전역에서 실행하며 준비 시간은 제외합니다. 시간 초과된 출력은 검사하지 않습니다. 브라우저·기기 성능에 따라 실행 시간이 달라집니다.
| 언어 | 엔진(버전) | 시간 제한 | 메모리 |
|---|---|---|---|
| javascript | 사용자 브라우저 JavaScript 엔진 (버전은 브라우저에 따라 다름) | 1000ms / 테스트 | 측정하지 않음(브라우저 채점) |
| python | Pyodide 314.0.7 (CPython 3.14 WASM) | 5000ms / 테스트 | 측정하지 않음(브라우저 채점) |