정수가 적힌 항목 중 원하는 항목들을 골라요. 선택한 항목의 최댓값과 최솟값의 차이는 width 이하여야 해요. 이 조건을 만족하며 가장 많은 항목을 골라 주세요.
vector<int> solution(vector<int> values, int width)는 [선택한 최대 개수, 선택한 항목 중 최솟값]을 반환해요. 최대 개수를 만드는 방법이 여러 가지면 최솟값이 가장 작은 방법을 선택해요. 같은 숫자가 적힌 항목도 각각 따로 셀 수 있어요.
매개변수와 반환값
항목 수는 0200, 각 값과 10,000인 정수예요. 항목 순서는 임의이고 값은 중복될 수 있어요. 배열이 비어 있으면 width는 0[0,-1]을 반환해요. 그 밖에는 한 항목 이상 선택해요. 반환 배열 길이는 항상 2이고 각 원소는 int예요.
예시
values=[8,2,3,9,4], width=2→[3,2]: 2·3·4를 고르면 차이가 2이고 세 개예요. 8·9는 두 개라 최대 개수가 아니에요.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: 중복값을 항목별로 유지해요.