# 생각

vector에 pair를 이용하여 입력받은 숫자와 등장하는 숫자의 빈도를 같이 저장해준다

입력 받은 수와 최초 등장횟수 1을 벡터에 push_back 해주고

vector를 체크해 같은 입력이 들어 왔을 경우 등장 횟수를 더해주면 해결할 수 있다

 

단, 등장하는 횟수가 같다면 먼저 나온 것이 앞에 있어야 하므로 stable_sort를 써준다

 

 

# 전체 코드

#include <bits/stdc++.h>
using namespace std;

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(nullptr);

	int n, c;
	cin >> n >> c;
	vector<pair<int, int>> v;
	for (int i = 0; i < n; i++)
	{
		int tmp;
		cin >> tmp;
		bool flag = false;
		for (auto& j : v)
		{
			if (j.first == tmp)
			{
				flag = true;
				j.second++;
				break;
			}
		}
		if (!flag) v.push_back({ tmp, 1 });
	}
	stable_sort(v.begin(), v.end(), [](const pair<int, int>& lhs, const pair<int, int>& rhs)
		{
			return lhs.second > rhs.second;
		});
	for (auto& i : v) while (i.second--) cout << i.first << ' ';
}

 


https://www.acmicpc.net/problem/2910

 

2910번: 빈도 정렬

첫째 줄에 메시지의 길이 N과 C가 주어진다. (1 ≤ N ≤ 1,000, 1 ≤ C ≤ 1,000,000,000) 둘째 줄에 메시지 수열이 주어진다.

www.acmicpc.net

'Algorithm > BOJ' 카테고리의 다른 글

[BOJ] 10825_국영수 with cpp  (0) 2022.03.01
[BOJ] 11656_접미사 배열 with cpp  (0) 2022.03.01
[BOJ] 1181_단어 정렬 with cpp  (0) 2022.02.28
[BOJ] 2751_수 정렬하기 2 with cpp  (0) 2022.02.28
[BOJ] 2750_수 정렬하기 with cpp  (0) 2022.02.28

+ Recent posts