← 실전 문제

범위 안에서 가장 많이 고르기

C++완성형

정수가 적힌 항목 중 원하는 항목들을 골라요. 선택한 항목의 최댓값과 최솟값의 차이는 width 이하여야 해요. 이 조건을 만족하며 가장 많은 항목을 골라 주세요.

vector<int> solution(vector<int> values, int width)는 [선택한 최대 개수, 선택한 항목 중 최솟값]을 반환해요. 최대 개수를 만드는 방법이 여러 가지면 최솟값이 가장 작은 방법을 선택해요. 같은 숫자가 적힌 항목도 각각 따로 셀 수 있어요.

매개변수와 반환값

항목 수는 0200, 각 값과 width는 010,000인 정수예요. 항목 순서는 임의이고 값은 중복될 수 있어요. 배열이 비어 있으면 [0,-1]을 반환해요. 그 밖에는 한 항목 이상 선택해요. 반환 배열 길이는 항상 2이고 각 원소는 int예요.

예시

  1. values=[8,2,3,9,4], width=2 → [3,2]: 2·3·4를 고르면 차이가 2이고 세 개예요. 8·9는 두 개라 최대 개수가 아니에요.
  2. values=[7,1,8,2], width=1 → [2,1]: 1·2와 7·8은 각각 두 개예요. 동률에서는 최솟값이 1인 선택을 반환해요.

자동 채점 입력·출력

첫 줄은 항목 수 N과 width, 다음 줄은 N개의 값이에요. N=0이면 값 줄은 없어도 돼요. 반환한 두 값을 공백으로 구분해 출력해요. 아래 하네스가 입력을 매개변수로 바꾸므로 solution만 작성해요.

예시 입력

5 2
8 2 3 9 4

예상 결과

3 2

예시 입력

4 1
7 1 8 2

예상 결과

2 1
핵심 개념
  • sliding-window: 오른쪽 끝을 늘리고 조건을 만족할 때까지 왼쪽 끝을 옮겨요.
  • basic-sort-search: 정렬로 최댓값·최솟값을 양 끝에 놓아요.
  • stl-vector: 중복값을 항목별로 유지해요.

코드 작성과 채점은 로그인 후 이용해요

로그인하고 풀기