백준 2910 주파수 정렬 C++

백준 2910 주파수 정렬.

백준의 “주파수 정렬” 문제인 2910번에 대한 자세한 내용은 기사 하단의 문제 링크를 참조하세요.

문제 2910에 대한 입력 및 예

입력:

5 2
2 1 2 1 2

인쇄:

2 2 2 1 1

암호

백준 “주파수 정렬” 문제 2910번 코드입니다.

#include <bits/stdc++.h>
using namespace std;
map<int, int> mp,mc;
bool cmp(pair<int,int> a,pair<int,int> b){
	if(a.first==b.first){
		return mc(a.second)< mc(b.second);
	}
	return a.first>b.first;
}
int main(){
    ios_base::sync_with_stdio(false); cin.tie(0);cout.tie(0);
    vector<pair<int,int>> p;
    int n,c,x;
	cin>>n>>c;
	for(int i=0;i<n;i++){
		cin>>x;
		mp(x)++;
		if(mc(x)==0)//map은 할당 안된값 0으로 초기화되어있음. 
			mc(x)=i+1;
	}
	for(auto v:mp)
		p.push_back({v.second,v.first});
	sort(p.begin(),p.end(),cmp);
	for(auto v: p){
		for(int i=0;i<v.first;i++)
			cout<<v.second<<" ";
	}
	return 0;
}

실행

예제의 입력으로 위의 코드를 실행했을 때의 결과입니다.