최빈값 구할 때, <숫자, 숫자의 빈도수> 를 저장하는 map을 정렬해야 하는 부분에서 시간이 걸렸다.
2022.2.22에 재채점 되서 다시 풀었다. 아래의 설명이 추가되었다.
(0 + 0 + (-1)) / 3 = -0.333333... 이고 이를 첫째 자리에서 반올림하면 0이다. -0으로 출력하면 안된다.
#include <bits/stdc++.h>
using namespace std;
int n, num;
double sum;
map<int,int> num_cnt;
vector<int> v;
bool comp(pair<int,int> &a, pair<int,int> &b){
if(a.second > b.second) return true;
return false;
}
int main(void) {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n;
for(int i = 0; i < n; i++){
cin >> num; // 숫자와 빈도수
if(num_cnt.count(num) == 0) num_cnt.insert({num, 1});
else num_cnt[num]++;
v.push_back(num);
sum += num; // 총합 구하기
}
sort(v.begin(), v.end()); // 오름차순 정렬
// 평균
double avg = round(sum / n);
if(abs(avg) == 0) avg = 0;
cout << avg << '\n';
// 중간값
cout << v[n/2] << '\n';
// 최빈값
vector<pair<int,int>> pv(num_cnt.begin(), num_cnt.end()); // map -> vector
sort(pv.begin(), pv.end(), comp);
(pv[0].second == pv[1].second) ? cout << pv[1].first << '\n' : cout << pv[0].first << '\n';
// 범위
cout << abs(v[n-1] - v[0]) << '\n';
return 0;
}
map 정렬을 위해 map을 vector<pair<int,int>> 로 바꿨다.
// 최빈값
vector<pair<int,int>> mapv(m.begin(), m.end()); // map -> vector
sort(mapv.begin(), mapv.end(), comp); // value 값 기준으로 정렬
if(mapv[0].second == mapv[1].second) cout << mapv[1].first << '\n';
else cout << mapv[0].first << '\n';
그리고 조건 함수는 '빈도수' 조건으로 작성한다.
bool comp(pair<int,int> &a, pair<int,int> &b){
if(a.second > b.second) return true;
return false;
}
728x90
'알고리즘 > 백준' 카테고리의 다른 글
저항 백준 1076번 c++ (0) | 2022.02.22 |
---|---|
크로아티아 알파벳 백준 2941번 c++ (0) | 2022.02.22 |
종이의 개수 백준 1780번 c++ (0) | 2022.02.21 |
하얀 칸 백준 1100번 c++ (0) | 2022.02.21 |
다이얼 백준 5622번 c++ (0) | 2022.02.21 |