득이공간
[백준 C++] 2108 통계학 - 정렬 본문
#include <iostream>
#include <cmath>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> Sequence;
bool compare(pair<int, int> a, pair<int, int> b)
{
return (a.second == b.second) ? a.first < b.first : a.second > b.second;
}
int main()
{
int N;
cin >> N;
Sequence.reserve(N);
for (int i = 0; i < N; ++i)
{
int Number;
cin >> Number;
Sequence.emplace_back(Number);
}
sort(Sequence.begin(), Sequence.end());
vector<pair<int, int>> FrequencyMap;
int Sum = 0;
for (const int& Number : Sequence)
{
Sum += Number;
auto iter = find_if(FrequencyMap.begin(), FrequencyMap.end(),
[&](pair<int, int> value)
{
return value.first == Number;
}
);
if (iter == FrequencyMap.end())
{
FrequencyMap.emplace_back(Number, 1);
}
else
{
++(*iter).second;
}
}
sort(FrequencyMap.begin(), FrequencyMap.end(), compare);
while (FrequencyMap.back().second != FrequencyMap.front().second)
{
FrequencyMap.pop_back();
}
int Average = round((float)Sum / Sequence.size());
int Median = Sequence[Sequence.size() / 2];
int Mode = (FrequencyMap.size() > 1) ? FrequencyMap[1].first : FrequencyMap[0].first;
int Range = Sequence.back() - Sequence.front();
cout << Average << '\n';
cout << Median << '\n';
cout << Mode << '\n';
cout << Range << '\n';
}
최빈값을 구할 때
pair 값을 이용해서 각 숫자의 빈도를 체크할 수 있게 벡터에 넣어주었습니다.
그리고 조건자를 이용해서 빈도수에 따라 내림차순 정렬 후 (빈도수가 같을 경우 숫자에 따른 오름차순)
빈도수가 제일 많은 값과 다른 원소들은 벡터에서 모두 삭제했습니다.
그리고 남은 원소가 여러 개일 경우 두 번째 원소를 선택하도록 구현했습니다.
'PS > 알고리즘 문제풀이' 카테고리의 다른 글
[백준 C++] 1654 랜선 자르기 - 이분탐색 (1) | 2024.01.29 |
---|---|
[백준 C++] 2805 나무 자르기 - 이분탐색 (0) | 2024.01.29 |
[백준 C++] 2178 미로 탐색 - 너비우선탐색 (1) | 2024.01.28 |
[백준 C++] 1260 DFS와 BFS - 깊이우선탐색, 너비우선탐색 (0) | 2024.01.25 |
[백준 C++] 2667 단지번호붙이기 - 깊이우선탐색 (1) | 2024.01.24 |