문제 3826 · 바이트 V
체험 상품 장바구니
| 시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
|---|---|---|---|---|---|
| 1000ms / 테스트 (언어별 보정은 아래 표) | 메모리: 측정하지 않음(브라우저 채점) | 0 | 0 | 0 | 0.00% |
문제
한 온라인 쇼핑몰은 새로 가입한 회원에게 체험 상품을 고를 수 있는 전용 예산을 제공한다. 체험 상품 목록에는 N개의 상품 항목이 있으며, 각 항목에는 정수 가격이 붙어 있다. 회원은 목록의 각 항목을 최대 한 번 구매할 수 있다. 서로 다른 항목의 가격이 같을 수 있으며, 가격이 같더라도 각각 별개의 상품으로 센다. 상품을 구매하는 순서는 자유롭고, 목록에 나타난 순서를 따를 필요는 없다. 쇼핑몰의 장바구니 추천 기능은 주어진 예산 B로 구매할 수 있는 상품의 개수를 최대화하려고 한다. 상품 가격의 합이 B 이하이면 구매 가능한 장바구니다. 예산과 가격 합이 정확히 같아도 구매할 수 있다. 상품 하나를 나누어 구매하거나 같은 항목을 여러 번 구매할 수는 없다. 이번 행사에서는 배송비, 세금, 할인, 적립금이 모두 없으므로 결제 금액은 고른 상품들의 가격을 단순히 더한 값이다. 가장 많은 상품을 담는 방법이 여러 가지라면, 그중 결제 금액이 가장 작은 방법을 선택한다. 따라서 출력할 남은 예산은 최대 개수의 상품을 구매하는 방법 중 가장 크게 남길 수 있는 금액이 된다. 상품 개수와 결제 금액까지 같은 방법이 여러 개라면 어느 방법을 선택해도 결과가 같으므로 상품 번호에 따른 추가 우선순위는 없다. 실제로 선택한 상품의 목록도 출력하지 않는다. 예산이 부족하여 상품을 하나도 구매할 수 없다면 구매 개수는 0이고 남은 예산은 B 그대로다. 모든 상품을 구매하고도 예산이 남는 경우에는 남은 금액을 그대로 기록한다. 상품 가격 목록과 예산이 주어질 때, 추천 기능이 선택할 구매 개수와 남은 예산을 구하는 프로그램을 작성한다.
입력
첫째 줄에 정수 N과 B가 공백으로 구분되어 주어진다. (1 ≤ N ≤ 100,000, 0 ≤ B ≤ 1,000,000,000) 둘째 줄에 각 상품 항목의 가격을 나타내는 정수 P₁, P₂, …, Pₙ이 공백으로 구분되어 주어진다. (1 ≤ Pᵢ ≤ 99) 가격이 같은 상품 항목도 각각 한 번씩 구매할 수 있다.
출력
최대로 구매할 수 있는 상품 개수와, 그 개수를 구매하면서 결제 금액을 최소화했을 때의 남은 예산을 공백으로 구분하여 한 줄에 출력한다.
예제 입력 1
6 17 8 3 5 3 9 4
예제 출력 1
4 2
예제 입력 2
3 1 2 2 7
예제 출력 2
0 1
예제 입력 3
4 20 4 4 4 4
예제 출력 3
4 4
힌트 펼치기
- 같은 개수의 상품을 고를 때는 가격이 싼 상품부터 고르는 것이 결제 금액을 최소화한다.
관련 서재 장
알고리즘 분류
정렬그리디풀이 작성
연습 채점은 공개 테스트로 실행합니다. 인증 제출은 코드를 봉인한 뒤 새 입력을 실행하고 서버에서 출력을 대조하며 코드와 판정을 저장합니다.
풀이를 제출하면 여기에서 결과를 확인할 수 있습니다.
연습 기록은 이 브라우저에 최근 50개를 저장합니다. 인증 기록은 내 제출에서 확인하세요.
이 브라우저의 연습 기록
언어별 제한
테스트 케이스마다 새 전역에서 실행하며 준비 시간은 제외합니다. 시간 초과된 출력은 검사하지 않습니다. 브라우저·기기 성능에 따라 실행 시간이 달라집니다.
| 언어 | 엔진(버전) | 시간 제한 | 메모리 |
|---|---|---|---|
| javascript | 사용자 브라우저 JavaScript 엔진 (버전은 브라우저에 따라 다름) | 1000ms / 테스트 | 측정하지 않음(브라우저 채점) |
| python | Pyodide 314.0.7 (CPython 3.14 WASM) | 5000ms / 테스트 | 측정하지 않음(브라우저 채점) |