최빈값 구할 때, <숫자, 숫자의 빈도수> 를 저장하는 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

+ Recent posts