https://www.acmicpc.net/problem/11652
<코드>
#include <iostream>
#include <map>
#include <vector>
#include <algorithm>
using namespace std;
long long cmp(pair<long long,int>a,pair<long long,int>b)
{
if(a.second == b.second) return a.first<b.first;
return a.second>b.second;
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n;
cin>>n;
map<long long,int>m;
map<long long,int>::iterator it;
vector<pair<long long,int>>v;
for(int i=0;i<n;i++)
{
long long num;
cin>>num;
m[num]++;
}
for(it=m.begin();it!=m.end();it++)
{
v.push_back(make_pair((*it).first,(*it).second));
}
sort(v.begin(),v.end(),cmp);
cout<<v[0].first;
}
<코드>
처음에 보자마자, map헤더를 이용해서 풀려고 했다.
map<key, value>
=> key : value
즉 key값에 빈도수를 값을 넣어 빈도수를 증가시켜주는 알고리즘으로 해결하려고 했다.
각각의 요소들을 접근해 어떤것이 빈도수가 가장 크고 빈도수가 같다면 숫자가 작은 것 부터 출력할 수 있는지 고민해야 된다.
cmp함수를 통해 이를 해결할 수 있다.
if(a.second == b.second) return a.first<b.first; 이 부분이 빈도수가 같다면 숫자가 작은 것을 출력하는 부분이고,
return a.second>b.second; 그렇지 않으면 빈도수가 큰 것을 출력하는 것이다.
first => key second => value가 저장되어 있다.
코드를 참조한 이유는 map헤더도 요소 접근이 가능한지 의문이 들었다. 예상했던대로 map헤더도 각각의 키 값과 value값을 각각 참조할 수 있음을 알 수 있었다.
<코드 참조>
[백준/BOJ] 11652번 카드 (C++) :: 노력의 천재 (tistory.com)
'PS > 정렬 알고리즘[Sort]' 카테고리의 다른 글
백준 1377 버블소트(c++) (0) | 2022.08.26 |
---|---|
백준 2628 종이자르기(c++) (1) | 2022.08.23 |
백준 2805 나무 자르기(c++) (0) | 2022.07.18 |
백준 2776 암기왕(c++) (0) | 2022.07.18 |
백준 1015 수열 정렬(c++) (0) | 2022.07.17 |