최빈값이 같을 때 두 번째로 작은 값을 출력하는 조건이 조금 까다로울 수 있다.
입력을 받을 때부터 map을 활용하여 빈도수를 저장했다.
그 빈도수 중에 같은 값이 있는지 찾고 같은 값을 가진 key들을 모아서 정렬한 후
작은 값을 찾았다.
최빈값을 굉장히 복잡하게 구했기 때문에 다른 사람들의 코드도 참고 필수
그 외 산술평균, 중앙값, 범위는 쉽게 구할 수 있다.
//통계학
#include <iostream>
#include <unordered_map>
#include <algorithm>
#include <cmath>
#include <vector>
int arr[500'000];
std::unordered_map<int, int> freq;
int N;
int mostFreq(){
int max{0};
std::vector<int> keys;
for(const auto& [key, value] : freq){
max = std::max(max, value);
}
for(const auto& [key, value] : freq){
if(value == max) keys.push_back(key);
}
std::sort(keys.begin(), keys.end());
return keys.size() == 1 ? keys[0] : keys[1];
}
int main(){
std::cin >> N;
double sum{0};
for(int i{0}; i<N; ++i){
std::cin >> arr[i];
sum += arr[i];
if(freq.find(arr[i]) != freq.end()) ++freq[arr[i]];
else freq[arr[i]] = 1;
}
std::cout << round(sum / N) + 0.0 << '\n';
std::sort(arr, arr+N);
std::cout << arr[N/2] << '\n';
std::cout << mostFreq() << '\n';
std::cout << arr[N-1] - arr[0];
return 0;
}