문제 4232 · 킬로 V
은행 창구의 안내 구간
| 시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
|---|---|---|---|---|---|
| 1000ms / 테스트 (언어별 보정은 아래 표) | 메모리: 측정하지 않음(브라우저 채점) | 0 | 0 | 0 | 0.00% |
문제
은행 창구에서는 다음 업무 시간에 처리할 현금 인출 신청서를 정리하고 있다. 신청서는 모두 N장이며, 각 신청서에는 고객이 인출하려는 금액이 적혀 있다. 신청 금액은 모두 양의 정수다. 같은 금액이 적힌 신청서도 서로 다른 신청서로 취급한다. 창구 담당자는 이번 업무 시간에 정확히 K장의 신청서를 처리한다. 신청서를 고르는 순서는 자유로우며, 입력된 순서대로 고를 필요는 없다. 고른 신청서를 처리할 때 고객에게 보여 줄 안내판에는 두 정수 L과 U를 적는다. L은 고른 신청서의 금액 중 최솟값이고, U는 그중 최댓값이어야 한다. 안내판은 이번에 처리하는 신청 금액이 L 이상 U 이하라는 뜻이다. 담당자는 안내판에 표시되는 금액의 폭인 U-L을 최대한 작게 만들려고 한다. 폭이 작으면 해당 업무 시간에 준비할 지폐 구성을 더 좁은 범위에 맞출 수 있기 때문이다. 가능한 선택 중 U-L이 가장 작은 안내 구간을 구해야 한다. 최소 폭을 만드는 안내 구간이 여러 개라면 L이 가장 작은 구간을 선택한다. 폭과 L이 같으면 U도 같으므로 추가적인 동점 처리는 필요하지 않다. 안내 구간 안에 금액이 들어가는 신청서를 모두 처리해야 하는 것은 아니다. 선택한 신청서는 정확히 K장이고, 나머지 신청서는 같은 금액이 적혀 있더라도 다음 업무 시간으로 넘길 수 있다. 또한 고른 신청서 자체나 처리 순서는 출력하지 않는다. 최종 안내판에 적을 L과 U만 출력한다. K는 1 이상 N 이하이므로 신청서를 고르는 방법은 항상 존재한다. K가 1이거나 같은 금액의 신청서를 K장 고를 수 있다면 안내 구간의 폭은 0이 될 수 있다.
입력
첫째 줄에 두 정수 N과 K가 공백으로 구분되어 주어진다. 1 ≤ K ≤ N ≤ 200,000이다. 둘째 줄에 각 신청서의 인출 금액을 나타내는 N개의 정수 A_1, A_2, ..., A_N이 공백으로 구분되어 주어진다. 1 ≤ A_i ≤ 1,000,000,000이다.
출력
조건에 따라 선택한 안내 구간의 최솟값 L과 최댓값 U를 공백으로 구분하여 한 줄에 출력한다. 두 값은 모두 정수로 출력한다.
예제 입력 1
7 3 18 7 11 8 19 12 9
예제 출력 1
7 9
예제 입력 2
6 4 25 25 41 25 25 41
예제 출력 2
25 25
예제 입력 3
5 1 34 16 28 16 52
예제 출력 3
16 16
힌트 펼치기
- 금액을 오름차순으로 정렬하면 연속한 K장을 선택하는 경우만 살펴보아도 된다.
- 각 구간의 양 끝 금액 차이를 비교하고, 차이가 같으면 왼쪽 끝 금액을 비교한다.
관련 서재 장
알고리즘 분류
정렬풀이 작성
연습 채점은 공개 테스트로 실행합니다. 인증 제출은 코드를 봉인한 뒤 새 입력을 실행하고 서버에서 출력을 대조하며 코드와 판정을 저장합니다.
풀이를 제출하면 여기에서 결과를 확인할 수 있습니다.
연습 기록은 이 브라우저에 최근 50개를 저장합니다. 인증 기록은 내 제출에서 확인하세요.
이 브라우저의 연습 기록
언어별 제한
테스트 케이스마다 새 전역에서 실행하며 준비 시간은 제외합니다. 시간 초과된 출력은 검사하지 않습니다. 브라우저·기기 성능에 따라 실행 시간이 달라집니다.
| 언어 | 엔진(버전) | 시간 제한 | 메모리 |
|---|---|---|---|
| javascript | 사용자 브라우저 JavaScript 엔진 (버전은 브라우저에 따라 다름) | 1000ms / 테스트 | 측정하지 않음(브라우저 채점) |
| python | Pyodide 314.0.7 (CPython 3.14 WASM) | 5000ms / 테스트 | 측정하지 않음(브라우저 채점) |