오늘의 알고리즘

[C++] 백준 20920 영단어 암기는 어려워

하늘하늘 . 2022. 6. 13. 15:07
#include <iostream>
#include <algorithm>
#include <vector>
#include <map>
 
std::map<std::string, int> map = {};
 
bool cmp(std::string s1, std::string s2)
{
    if (s1.size() == s2.size() && map[s1] == map[s2])
        return s1 < s2;
 
    else if (map[s1] == map[s2])
        return s1.size() > s2.size();
 
    return map[s1] > map[s2];
}
 
int main()
{
    std::ios::sync_with_stdio(false);
    std::cin.tie(NULL);
 
    int N = 0;
    int M = 0;
    std::cin >> N >> M;
 
    std::vector<std::string> vec = {};
 
    for (int i = 0; i < N; ++i)
    {
        std::string s = {};
        std::cin >> s;
 
        if (s.size() < M)
            continue;
 
        if (!map[s])
            vec.push_back(s);
 
        ++map[s];
    }
 
    std::sort(vec.begin(), vec.end(), cmp);
 
    for (int i = 0; i < vec.size(); ++i)
    {
        std::cout << vec[i] << "\n";
    }
 
    return 0;
}
 

sort를 어떻게 하느냐가 중요했던 문제

여기서 시간이랑 메모리를 줄이기 위해서 map을 사용하지 않고 한다면 더 공부가 될 것이다.