매일 BOJ
(매일 BOJ) C++ 2108번 통계학
norepinephrine
2025. 7. 16. 00:08
이번 문제는 실버 2 난이도의 통계학 문제이다.

접근법
특별할게 딱히 없는 그냥 귀찮은 구현 문제라 하나하나 단계별로 함수로 구현하는 방식으로 접근하면 쉽게 해결할 수 있을 것 같다.
아래는 작성한 코드이다.
# include <bits/stdc++.h>
using namespace std;
int avr (const vector<int>& v);
int center (const vector<int>& v);
int mode (const vector<int>& v);
int boundery (const vector<int>& v);
int main (void){
ios::sync_with_stdio(0); cin.tie(0);
int N;
cin >> N;
vector<int> v;
for (int i = 0; i < N; i++){
int num;
cin >> num;
v.push_back(num);
}
int average = avr(v);
cout << average << '\n';
int mid = center(v);
cout << mid << '\n';
int mod = mode(v);
cout << mod <<'\n';
int bdy = boundery(v);
cout << bdy <<'\n';
}
int avr (const vector<int>& v){
int sum = 0;
for (int i : v) sum += i;
int result = round((double)sum / v.size());
return result;
}
int center (const vector<int>& v){
vector<int> center = v;
sort(center.begin(),center.end());
int mid = center.size()/2;
return center[mid];
}
int mode(const vector<int>& v) {
map<int,int> m;
for (int x : v){
m[x] += 1;
}
int max1 = 0;
for (auto[value,count] : m){
max1 = max(max1,count);
}
vector<int> candidates;
for (auto [val, cnt] : m) {
if (cnt == max1)
candidates.push_back(val);
}
sort(candidates.begin(),candidates.end());
if (candidates.size() >= 2) return candidates[1];
else return candidates[0];
}
int boundery (const vector<int>& v){
vector<int> a = v;
sort(a.begin(),a.end());
int max = a.back();
int min = a.front();
return max - min;
}