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;
}