문제 4272 · 킬로 V
점검 창에 맞춘 지원 작업
| 시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
|---|---|---|---|---|---|
| 1000ms / 테스트 (언어별 보정은 아래 표) | 메모리: 측정하지 않음(브라우저 채점) | 0 | 0 | 0 | 0.00% |
문제
사내 IT 지원팀은 직원들이 업무를 마친 뒤 공용 장비를 점검한다. 오늘 사용할 수 있는 점검 창의 길이는 정확히 T분이다. 지원팀은 이 시간에 실행할 수 있는 독립적인 작업 N개를 준비했으며, 각 작업에 필요한 시간은 미리 측정되어 있다. 작업 시간은 모두 양의 정수이고, 실행 중에 작업을 중단하거나 일부만 실행할 수는 없다. 지원팀은 준비한 작업 중 일부를 골라 하나씩 차례로 실행하려 한다. 각 작업은 최대 한 번만 선택할 수 있다. 서로 다른 작업 사이에는 준비 시간이나 대기 시간이 없으므로, 선택한 작업들의 실행 시간 합이 전체 점검 시간이다. 작업을 실행하는 순서에 따라 시간이 달라지지는 않는다. 실행 시간이 같은 작업이 여러 개 있어도 이들은 서로 다른 작업이므로 각각 한 번씩 선택할 수 있다. 장비의 예약 시스템은 점검 창이 끝나는 순간 모든 작업이 완료되어야 다음 날의 업무 준비를 시작한다. 따라서 선택한 작업 시간의 합은 T보다 작아도 안 되고 커도 안 된다. 작업을 마친 뒤 남는 시간을 기다리는 것으로 채우는 것도 허용되지 않는다. 지원팀은 시간을 정확히 맞추는 선택이 여러 개라면, 확인해야 할 작업 기록을 줄이기 위해 선택한 작업의 수가 가장 적은 것을 사용한다. 예를 들어 시간이 같은 두 작업을 선택한 경우에는 두 작업의 시간을 모두 합하고 작업 수도 2개로 센다. 반대로 시간을 정확히 맞출 방법이 없다면 작업을 시작하지 않는다. 작업 목록과 점검 창의 길이가 주어질 때, 실행 시간이 정확히 T분이 되는 선택에 필요한 최소 작업 수를 구한다. 최소 작업 수가 같은 선택 사이에는 우선순위가 없으며, 선택한 작업의 번호나 실행 순서는 출력하지 않는다.
입력
첫째 줄에 정수 N과 T가 공백으로 주어진다. 둘째 줄에 각 작업의 실행 시간 A_1, A_2, ..., A_N이 공백으로 주어진다. 1 ≤ N ≤ 20 1 ≤ T ≤ 1,000,000 1 ≤ A_i ≤ 1,000,000 입력의 모든 수는 정수이다.
출력
실행 시간의 합이 정확히 T가 되도록 선택할 수 있다면 최소 작업 수를 한 줄에 출력한다. 그러한 선택이 없다면 -1을 출력한다.
예제 입력 1
6 17 9 8 6 5 4 3
예제 출력 1
2
예제 입력 2
4 11 2 4 6 8
예제 출력 2
-1
예제 입력 3
3 12 6 6 6
예제 출력 3
2
힌트 펼치기
- 각 작업을 선택하는 경우와 선택하지 않는 경우로 나누어 탐색한다.
- 현재 합이 목표를 넘거나, 남은 시간을 모두 더해도 목표에 못 미치면 탐색을 중단할 수 있다.
관련 서재 장
알고리즘 분류
재귀백트래킹풀이 작성
연습 채점은 공개 테스트로 실행합니다. 인증 제출은 코드를 봉인한 뒤 새 입력을 실행하고 서버에서 출력을 대조하며 코드와 판정을 저장합니다.
풀이를 제출하면 여기에서 결과를 확인할 수 있습니다.
연습 기록은 이 브라우저에 최근 50개를 저장합니다. 인증 기록은 내 제출에서 확인하세요.
이 브라우저의 연습 기록
언어별 제한
테스트 케이스마다 새 전역에서 실행하며 준비 시간은 제외합니다. 시간 초과된 출력은 검사하지 않습니다. 브라우저·기기 성능에 따라 실행 시간이 달라집니다.
| 언어 | 엔진(버전) | 시간 제한 | 메모리 |
|---|---|---|---|
| javascript | 사용자 브라우저 JavaScript 엔진 (버전은 브라우저에 따라 다름) | 1000ms / 테스트 | 측정하지 않음(브라우저 채점) |
| python | Pyodide 314.0.7 (CPython 3.14 WASM) | 5000ms / 테스트 | 측정하지 않음(브라우저 채점) |