- toc {:toc}
풀이
최빈값이 메인인 문제였다. 최빈값을 카운트 하기 위해 freq_ch 배열을 통해 빈도를 체크했다. 정렬을 한 상태에서 최빈값을 선택하기 때문에 같은 최빈값 내에서 두 번째로 작은 값을 equal == 0 && val != max_idx 를 통해서 체크할 수 있다.
#include <bits/stdc++.h>
using namespace std;
int num[500005];
int freq_ck[8005] = {0,};
int main(){
int N, val, mid, range, idx, offset = 4000;
int avg, sum = 0;
int low = 9999, high = -9999, max_idx= 4003, equal = 0;
cin >> N;
for(int i = 0; i < N; i++){
cin >> val;
// 산술 평균
sum += val;
// 중앙값
num[i] = val;
freq_ck[val+offset]++;
}
sort(num, num+N);
for(int i = 0; i < N; i++){
// 최빈값
val = num[i];
idx = val + offset;
if (freq_ck[idx] > freq_ck[max_idx+offset]) {
max_idx = val;
equal = 0;
}
else if (freq_ck[idx] == freq_ck[max_idx+offset]){
if(equal == 0 && val != max_idx){
equal = 1;
max_idx = val;
}
}
// 범위
if (low > val) low = val;
if (high < val) high = val;
}
avg = round((float)sum / N);
cout << avg << '\n';
cout << num[(N-1)/2] << '\n';
cout << max_idx << '\n';
range = high-low;
cout << range << '\n';
return 0;
}