PS/정렬 알고리즘[Sort]

백준 11652 카드(c++)

SeungbeomKim 2022. 8. 19. 14:19

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

 

11652번: 카드

준규는 숫자 카드 N장을 가지고 있다. 숫자 카드에는 정수가 하나 적혀있는데, 적혀있는 수는 -262보다 크거나 같고, 262보다 작거나 같다. 준규가 가지고 있는 카드가 주어졌을 때, 가장 많이 가지

www.acmicpc.net

<코드>

#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) 

 

[백준/BOJ] 11652번 카드 (C++)

www.acmicpc.net/problem/11652 11652번: 카드 준규는 숫자 카드 N장을 가지고 있다. 숫자 카드에는 정수가 하나 적혀있는데, 적혀있는 수는 -262보다 크거나 같고, 262보다 작거나 같다. 준규가 가지고 있는

transferhwang.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