문제: 2910번: 빈도 정렬
basic-algo-lecture/workbook/0x0F.md at master · encrypted-def/basic-algo-lecture
basic-algo-lecture/workbook/0x0F.md at master · encrypted-def/basic-algo-lecture
바킹독의 실전 알고리즘 강의 자료. Contribute to encrypted-def/basic-algo-lecture development by creating an account on GitHub.
github.com
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <cmath>
#include <queue>
using namespace std;
bool compare(pair<int, int> a, pair<int, int> b) {
return a.second > b.second; // 빈도가 높은 순 정렬
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n, c;
cin >> n >> c;
vector<pair<int, int>> nums;
for (int i = 0; i < n; i++) {
int num;
cin >> num;
bool flag = false;
for (int j = 0; j < nums.size(); j++) {
if (nums[j].first == num) {
nums[j] = make_pair(num, nums[j].second + 1);
flag = true;
break;
}
}
if (!flag) {
// 여기 도달했으면 없다는거니까 새로 추가
nums.push_back(make_pair(num, 1));
}
}
stable_sort(nums.begin(), nums.end(), compare);
for (pair<int, int> tmp : nums) {
int cnt = tmp.second;
while (cnt > 0) {
cout << tmp.first << " ";
cnt--;
}
}
return 0;
}
그냥 stable_sort 이용하면 쉽게 풀 수 있는 문제이다. 일단 벡터에 수와, 수에 대응하는 빈도를 함께 저장한다. 그 다음 stabke_sort 로 정렬을 해주는데 compare 함수를 넘겨준다. compare 함수는 빈도가 높은 순으로 정렬할 수 있도록 한다.