C++/백준 C++
[C/C++] 백준 20920번 영단어 암기는 괴로워 - 참고
CE : 하랑
2023. 12. 7. 15:10
코드
#include <iostream>
#include <unordered_map>
#include <vector>
#include <algorithm> // sort
using namespace std;
bool cmp(pair<string, int>& a, pair<string, int>& b) { // > : 내림차순, < : 오름차순
if (a.second == b.second) { // a와 b의 영단어 개수가 같을 경우
if (a.first.size() == b.first.size()) { // 영단어 개수와 길이가 같은 경우
return a.first < b.first; // 조건이 참일 경우 오름차순 정렬
}
return a.first.size() > b.first.size(); // a 영단어 길이가 b 영단어 길이보다 클 경우 -> 내림차순 정렬
}
return a.second > b.second; // a 영단어 개수가 b 영단어 개수보다 클 경우 -> 내림차순 정렬
}
int main()
{
cin.tie(0); // 코드를 작성하면 입출력 속도가 빨라진다. -> C와 C++ 표준 stream의 동기화를 비활성화
cout.tie(0); // C++의 입출력인 cin, cout만 사용하도록 주의해야합니다.
int n, m;
unordered_map<string, int> hashmap; // string : 영단어, int : 단어의 개수
cin >> n >> m;
for (int i = 0; i < n; i++) {
string word;
cin >> word;
if (word.size() >= m) { // 영단어 길이는 m보다 크거나 같아야 한다.
hashmap[word]++; // 해당 영단어의 개수 확인
}
}
vector<pair<string, int>> check(hashmap.begin(), hashmap.end());
sort(check.begin(), check.end(), cmp);// cmp 조건에 맞게 정렬 실행
for (auto w : check) {
cout << w.first << "\n";
}
return 0;
}