영단어 암기는 괴로워 C++ - 백준 20920

김관중·2024년 1월 24일
0

백준

목록 보기
26/129

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

이 문제는 다양한 방식의 정렬을 활용하면 되는 문제이다.

이 문제의 포인트는 정렬 함수였다.

  1. 빈도수
  2. 길이
  3. 알파벳 순

일단 map에서 알파벳 순으로 정렬해주어서 이 부분은 정렬하지 않아도 되고,

차례대로 길이 정렬, 빈도수 정렬을 시행해주면 된다.

일단 빈도수를 체크해야 하기 때문에 탐색이 O(logn)인

map을 사용해주었고, 나중에 vector로 변환해서 정렬해주었다.

코드는 다음과 같다.

#include <iostream>
#include <string>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;

int n,m;
string s;
map<string, int> mm;

int main(){
	ios_base::sync_with_stdio(false); cin.tie(NULL);
	cin >> n >> m;
	for(int i=0;i<n;i++){
		cin >> s;
		if(mm.find(s)!=mm.end()) mm[s]++;
		else mm.insert({s,1});
	}
	vector<pair<string, int>> v(mm.begin(), mm.end());
	stable_sort(v.begin(),v.end(),[](pair<string, int> lp,pair<string, int> rp)->bool{
		return lp.first.length()>rp.first.length();
	});
	stable_sort(v.begin(),v.end(),[](pair<string, int> lp,pair<string, int> rp)->bool{
		return lp.second>rp.second;
	});
	for(int i=0;i<v.size();i++){
		if(v[i].first.length()>=m) cout << v[i].first << '\n';
	}
}
profile
꾸준히 학습하기

0개의 댓글

관련 채용 정보