728x90
반응형
목차
https://www.acmicpc.net/problem/2910
문제
보시기 전에 참고하면 좋을 것 같습니다..
https://be-senior-developer.tistory.com/9
문제를 풀기 전에 알아야 될 점
벡터의 정렬 기준을 정해주는 오퍼레이터
bool cmp(int a, int b) { //정렬기준을 제공
return a < b; //앞a가 뒤b보다 작을 경우 true를 반환해서 순서를 유지함
}
문제 구현 방향 및 풀이
문제 풀이 시 만든 배열
vector<pair<int, int>> v; //정렬을 하기위한 벡터
map<int, int> num_m; //값에 대한 빈도수를 저장하기 위한 맵
map<int, int> first_m; //순위를 저장하기 위한 맵
값에 대한 빈도수를 저장한 맵과 순위를 저장한 맵을 이용해 벡터에 넣고 정렬 기준을 오퍼레이터에
넣어주고 정렬해 주면 된다.
코드 구현
#include <iostream>
#include <vector>
#include<algorithm>
#include<map>
using namespace std;
vector<pair<int, int>> v; //정렬을 하기위한 벡터
map<int, int> num_m;
map<int, int> first_m; //순위를 저장하기 위한 벡터
int a[1004] = { 0 };
bool cmp(pair<int,int> a, pair<int, int> b) { //정렬기준을 제공
if (a.second == b.second)
return first_m[a.first] < first_m[b.first];
return a.second > b.second;
}
int main()
{
int N, C, i, j;
cin >> N >> C;
for (i = 0; i < N; i++) {
cin >> a[i];
num_m[a[i]]++; //카운트 1증가
if (first_m[a[i]] == 0) //처음 나왔을 때만 순위 저장
first_m[a[i]] = i + 1;
}
for (auto k : num_m)
v.push_back({k.first, k.second}); //값과 빈도 벡터에 넣어준다
sort(v.begin(), v.end(), cmp); //정렬기준을 바탕으로 정렬
for (auto k : v) {
for (j = 0; j < k.second; j++) {
cout << k.first << " "; //빈도만큼 각 값을 출력해 준다.
}
}
}
반응형
'백준 문제풀이' 카테고리의 다른 글
[백준][문자열] 2852 NBA 농구 c++구현 (0) | 2024.04.30 |
---|---|
[백준][문자열] 4659 비밀번호 발음하기 c++구현 (0) | 2024.04.13 |
[백준][dfs] 2583 영역 구하기 c++ 구현 (0) | 2024.04.04 |
[백준][bfs] 2468 안전 영역 c++ 구현 (0) | 2024.04.02 |
[백준][스택] 9935 문자열 폭발 c++구현 (1) | 2024.04.01 |