본문 바로가기
개발 노트/백준, 프로그래머스 풀이

[백준 1302/c++] 베스트셀러

by tokkiC 2022. 7. 8.

map을 사용하여 string 마다 카운트 해준뒤 (unordered_map 도 가능하다)

맵을 벡터에 페어로 넣어서

벡터를 요소(페어)의 second 값으로 내림차순 정렬하고 second 값이 같으면

first 값으로 오름차순 정렬하는 사용자 정의 함수를 만들어주면 되는 문제이다

나는 풀 수 있다!

map 을 벡터로 넣는 방법은 

https://unluckyjung.github.io/cpp/2020/05/07/Sort_map_by_value/ 이 분의 블로그 글이 잘 정리되어 있어 첨부한다

      ↑ 위의 const pair<int, int>& a 의 부분은 그냥 pair<int, int> a 로 간단하게 해도 문제없이 작동한다

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

 

1302번: 베스트셀러

첫째 줄에 오늘 하루 동안 팔린 책의 개수 N이 주어진다. 이 값은 1,000보다 작거나 같은 자연수이다. 둘째부터 N개의 줄에 책의 제목이 입력으로 들어온다. 책의 제목의 길이는 50보다 작거나 같고

www.acmicpc.net

#include <bits/stdc++.h>
using namespace std;

bool cmp(const pair<string, int>& a, const pair<string, int>& b){
	if(a.second == b.second){
		return a.first < b.first;
	}
	return a.second > b.second;
}


int main(){
	
	int n;
	string s;
	map<string, int> mcnt;
	
	cin >> n;
	for(int i=0; i<n; i++){
		cin >> s;
		
		if(mcnt.find(s)==mcnt.end()){
			mcnt.emplace(make_pair(s, 1));
		} else {
			mcnt[s]++;
		}
	}
	
	vector<pair<string, int>> v(mcnt.begin(), mcnt.end());
	sort(v.begin(), v.end(), cmp);	
	
	cout << v.front().first << "\n";
	
	return 0;
}

댓글