문제 4508 · 킬로 IV
공동 구매의 결제 상한
| 시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
|---|---|---|---|---|---|
| 1000ms / 테스트 (언어별 보정은 아래 표) | 메모리: 측정하지 않음(브라우저 채점) | 0 | 0 | 0 | 0.00% |
문제
한 온라인 쇼핑몰에서는 공동 구매 행사를 준비하고 있다. 행사에 참여할 주문 N개는 이미 확정되어 있고, 각 주문에는 할인 전 결제 금액이 정해져 있다. 쇼핑몰은 주문마다 다른 할인율을 정하는 대신, 행사 전체에 하나의 결제 상한 C를 적용하려고 한다. 결제 상한은 0 이상 9,999 이하의 정수여야 한다. 할인 전 결제 금액이 P인 주문에 상한 C를 적용하면 실제 결제 금액은 P와 C 중 작은 값이 된다. 예를 들어 할인 전 금액이 700인 주문에 상한 500을 적용하면 500을 결제하고, 할인 전 금액이 300인 주문에는 같은 상한을 적용해도 300을 결제한다. 상한을 0으로 정하면 모든 주문의 실제 결제 금액은 0이 된다. 모든 금액은 같은 정수 단위를 사용하며, 추가 수수료나 배송비는 없다. 쇼핑몰은 이번 행사에서 실제 결제 금액의 합이 목표 금액 B 이상이 되기를 원한다. 동시에 가능한 한 낮은 상한을 제시하여 손님들의 부담을 줄이려고 한다. 따라서 목표를 달성하는 상한 중 가장 작은 정수 C를 찾아야 한다. 목표 금액과 정확히 같아질 필요는 없으며, 실제 결제 금액의 합이 목표 금액을 초과해도 조건을 만족한다. 주문은 나누거나 합칠 수 없고 행사에서 제외할 수도 없다. 같은 금액의 주문이 여러 개 있더라도 각각 별도로 합산한다. 주어진 범위의 어떤 상한을 선택해도 목표를 달성할 수 없는 경우가 있을 수 있다. 할인 전 주문 금액들과 목표 금액이 주어질 때, 사용할 수 있는 가장 작은 결제 상한을 구하는 프로그램을 작성한다.
입력
첫째 줄에 정수 N과 B가 공백으로 구분되어 주어진다. 1 ≤ N ≤ 60,000, 0 ≤ B ≤ 1,000,000,000이다. 둘째 줄에 각 주문의 할인 전 결제 금액인 정수 P_1, P_2, ..., P_N이 공백으로 구분되어 주어진다. 모든 i에 대해 1 ≤ P_i ≤ 9,999이다.
출력
실제 결제 금액의 합을 B 이상으로 만드는 가장 작은 정수 상한 C를 한 줄에 출력한다. C는 0 이상 9,999 이하여야 한다. 조건을 만족하는 C가 없으면 -1을 출력한다.
예제 입력 1
4 17 2 8 5 9
예제 출력 1
5
예제 입력 2
3 20 3 4 5
예제 출력 2
-1
예제 입력 3
2 0 7 12
예제 출력 3
0
힌트 펼치기
- 결제 상한을 높일 때 실제 결제 금액의 합이 줄어들 수 있는지 생각한다.
- 특정 상한이 목표를 달성하는지 검사하는 함수를 만들고, 처음으로 성공하는 상한을 찾는다.
관련 서재 장
알고리즘 분류
이분 탐색매개변수 탐색풀이 작성
연습 채점은 공개 테스트로 실행합니다. 인증 제출은 코드를 봉인한 뒤 새 입력을 실행하고 서버에서 출력을 대조하며 코드와 판정을 저장합니다.
풀이를 제출하면 여기에서 결과를 확인할 수 있습니다.
연습 기록은 이 브라우저에 최근 50개를 저장합니다. 인증 기록은 내 제출에서 확인하세요.
이 브라우저의 연습 기록
언어별 제한
테스트 케이스마다 새 전역에서 실행하며 준비 시간은 제외합니다. 시간 초과된 출력은 검사하지 않습니다. 브라우저·기기 성능에 따라 실행 시간이 달라집니다.
| 언어 | 엔진(버전) | 시간 제한 | 메모리 |
|---|---|---|---|
| javascript | 사용자 브라우저 JavaScript 엔진 (버전은 브라우저에 따라 다름) | 1000ms / 테스트 | 측정하지 않음(브라우저 채점) |
| python | Pyodide 314.0.7 (CPython 3.14 WASM) | 5000ms / 테스트 | 측정하지 않음(브라우저 채점) |