문제 3842 · 바이트 V
호텔 객실의 점검 예산
| 시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
|---|---|---|---|---|---|
| 1000ms / 테스트 (언어별 보정은 아래 표) | 메모리: 측정하지 않음(브라우저 채점) | 0 | 0 | 0 | 0.00% |
문제
한 호텔은 손님을 받기 전에 비어 있는 객실 가운데 일부를 골라 추가 점검을 하려 한다. 객실마다 필요한 작업이 달라 점검 비용도 서로 다르다. 시설 담당자는 객실별 점검 비용과 이번에 사용할 수 있는 전체 예산을 전달받았다. 점검을 선택한 객실의 비용을 모두 더한 값은 예산을 넘을 수 없다. 객실 하나의 점검을 여러 번 나누어 선택할 수는 없다. 어떤 객실을 점검하려면 그 객실의 비용을 전부 지불해야 하며, 같은 객실은 한 번만 선택할 수 있다. 반대로 비용이 같은 서로 다른 객실은 각각 선택할 수 있다. 객실 사이에는 작업상의 의존 관계가 없으므로 어느 객실을 고르더라도 다른 객실의 비용은 바뀌지 않는다. 모든 객실은 추가 점검 대상으로서 같은 가치를 가진다. 시설 담당자의 첫 번째 목표는 예산 안에서 점검하는 객실 수를 최대한 늘리는 것이다. 최대 객실 수를 달성하는 선택이 여러 가지라면, 그중 지출하는 총비용이 가장 작은 선택을 사용한다. 비용이 같은 선택까지 구별할 필요는 없다. 선택한 객실의 번호나 점검 순서는 출력하지 않고, 최대로 점검할 수 있는 객실 수와 그 수를 달성하는 최소 총비용만 출력한다. 예산을 모두 사용할 필요는 없다. 예산이 남더라도 추가로 선택할 수 있는 객실이 없으면 점검을 마친다. 모든 객실의 점검이 가능하면 객실을 전부 선택한다. 예산이 0이거나 어떤 객실의 비용도 지불할 수 없다면 아무 객실도 선택하지 않으며, 이때 객실 수와 총비용은 모두 0이다. 주어진 비용 목록을 이용하여 담당자가 보고할 두 값을 구하는 프로그램을 작성한다.
입력
첫째 줄에 객실 수 N과 예산 B가 공백으로 구분되어 주어진다. N은 1 이상 100,000 이하의 정수이고 B는 0 이상 9,900,000 이하의 정수다. 둘째 줄에 각 객실의 점검 비용 A_1, A_2, ..., A_N이 공백으로 구분되어 주어진다. 각 비용은 1 이상 99 이하의 정수다. 같은 비용이 여러 번 나타날 수 있다.
출력
최대로 점검할 수 있는 객실 수와, 그 수의 객실을 점검하는 데 필요한 최소 총비용을 공백으로 구분하여 한 줄에 출력한다. 아무 객실도 선택할 수 없으면 0 0을 출력한다.
예제 입력 1
5 14 8 3 3 6 2
예제 출력 1
4 14
예제 입력 2
4 1 2 5 2 9
예제 출력 2
0 0
예제 입력 3
3 20 4 4 4
예제 출력 3
3 12
힌트 펼치기
- 정확히 k개를 선택할 때 총비용을 가장 작게 만드는 객실들이 무엇인지 생각한다.
관련 서재 장
알고리즘 분류
정렬그리디풀이 작성
연습 채점은 공개 테스트로 실행합니다. 인증 제출은 코드를 봉인한 뒤 새 입력을 실행하고 서버에서 출력을 대조하며 코드와 판정을 저장합니다.
풀이를 제출하면 여기에서 결과를 확인할 수 있습니다.
연습 기록은 이 브라우저에 최근 50개를 저장합니다. 인증 기록은 내 제출에서 확인하세요.
이 브라우저의 연습 기록
언어별 제한
테스트 케이스마다 새 전역에서 실행하며 준비 시간은 제외합니다. 시간 초과된 출력은 검사하지 않습니다. 브라우저·기기 성능에 따라 실행 시간이 달라집니다.
| 언어 | 엔진(버전) | 시간 제한 | 메모리 |
|---|---|---|---|
| javascript | 사용자 브라우저 JavaScript 엔진 (버전은 브라우저에 따라 다름) | 1000ms / 테스트 | 측정하지 않음(브라우저 채점) |
| python | Pyodide 314.0.7 (CPython 3.14 WASM) | 5000ms / 테스트 | 측정하지 않음(브라우저 채점) |