문제 설명
크기가 n이고 요소가 x인 배열 "arr"이 주어지면 중앙값이 x와 같도록 배열에 추가할 요소의 최소 수를 찾는 것이 작업입니다.
길이가 n인 배열의 중앙값은 요소를 내림차순으로 정렬한 후 위치 번호 (n-1)/2를 차지하는 요소입니다. 예를 들어, 아래 배열 중앙값은 20 −
입니다.arr1[] ={10, 20, 30, 40}
arr[] ={1, 2, 3}이고 x =4이면 중앙값이 4가 되도록 배열에 4개의 숫자, 즉 {4, 5, 5, 5}를 추가해야 합니다.
알고리즘
알고리즘은 매우 간단합니다. 배열의 중앙값이 x가 될 때까지 하나의 숫자 x를 배열에 추가해야 합니다.
예시
#include <iostream> #include <algorithm> using namespace std; int minNumbersToBeAdded(int *arr, int n, int x){ sort(arr, arr + n); int cnt = 0; while (arr[(n - 1)/2] != x) { arr[n] = x; ++n; sort(arr, arr + n); ++cnt; } return cnt; } int main(){ int arr[20] = {1, 2, 3}; int x = 4; int n = 3; cout << "Minimum numbers to be added = " << minNumbersToBeAdded(arr, n, x) << endl; return 0; }
출력
위의 프로그램을 컴파일하고 실행할 때. 다음 출력을 생성합니다 -
Minimum numbers to be added = 4