개발/C++
[BOJ] 2108 - 통계학
차파랑
2022. 2. 3. 23:28
#include <iostream>
#include <algorithm>
#include <vector>
#include <cmath>
using namespace std;
int mean(int* nums, int n);
int median(int* nums, int n);
int mode(int* nums, int n);
int range(int* nums, int n);
struct NumCount {
int number;
int count;
};
int main(){
int n;
cin >> n;
int* nums = new int[n];
for(int i = 0; i < n; i++) cin >> nums[i];
sort(nums, nums+n);
cout << mean(nums, n) << "\n";
cout << median(nums, n) << "\n";
cout << mode(nums, n) << "\n";
cout << range(nums, n) << "\n";
}
int mean(int* nums, int n){
int sum = 0;
for(int i = 0; i < n; i++) sum += nums[i];
return round(sum / (double)n);
}
int median(int* nums, int n){
int index = n / 2;
return nums[index];
}
bool compare(NumCount a, NumCount b){
return a.count > b.count;
}
int mode(int* nums, int n){
vector<NumCount> counts;
NumCount tmp = NumCount();
tmp.number = nums[0];
tmp.count = 1;
counts.push_back(tmp);
for(int i = 1; i < n; i++){
if(nums[i] == counts.back().number){
counts.back().count++;
} else {
NumCount tmp = NumCount();
tmp.number = nums[i];
tmp.count = 1;
counts.push_back(tmp);
}
}
stable_sort(counts.begin(), counts.end(), compare);
if(counts.size() > 2 && (counts.at(0).count == counts.at(1).count)){
return counts.at(1).number;
} else {
return counts.at(0).number;
}
}
int range(int* nums, int n){
return nums[n-1] - nums[0];
}