-
[백준/BOJ] 11652번 카드 (C++)알고리즘 문제풀이/백준 2021. 1. 10. 21:16
정렬 유형의 문제였습니다.
입력값을 map으로 받고 그 입력값을 key값으로 나오는 빈도수를 value로 저장합니다. 저장이 끝나고, 벡터를 pair형으로 선언하여 map의 key, value를 한 쌍으로 옮겨줍니다. 마지막으로 cmp 함수를 크기와 빈도 수를 기준으로 정렬할 수 있게끔 구현하였습니다. 문제를 풀면서 주의해야할 점은 입력값의 크기가 최대 2^62 이므로 long long 자료형을 이용해야 오버플로우가 발생하지 않습니다.
#include <iostream> #include <vector> #include <map> #include <algorithm> using namespace std; typedef long long ll; ll cmp(pair<int, ll> a, pair<int, ll> b) { if(a.first == b.first) return a.second < b.second; // 크기 비교 return a.first > b.first; // 빈도 수 비교 } int main(void) { ios_base::sync_with_stdio(false); cin.tie(0); int n; cin >> n; map<ll, int> m; // 크기, 빈도 수 map<ll, int>::iterator it; vector<pair<int, ll> > v; for(int i = 0; i < n; i++) { ll num; cin >> num; m[num]++; } for(it = m.begin(); it != m.end(); it++) { v.push_back({it->second, it->first}); } sort(v.begin(), v.end(), cmp); cout << v[0].second; }
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
[백준/BOJ] 11656번 접미사 배열 (C++) (0) 2021.01.10 [백준/BOJ] 5648번 역원소 정렬 (C++) (0) 2021.01.10 [백준/BOJ] 1431번 시리얼 번호 (C++) (0) 2021.01.10 [백준/BOJ] 11931번 수 정렬하기 4 (C++) (0) 2021.01.10 [백준/BOJ] 2751번 수 정렬하기 2 (C++) (0) 2021.01.10