코딩테스트/프로그래머스

프로그래머스 문제풀이 - 베스트앨범 (해시)

글로벌디노 2020. 10. 21. 22:37

프로그래머스 문제풀이

코딩테스트 연습 > 해시 > 베스트앨범

programmers.co.kr/learn/courses/30/lessons/42579

 

 

C++

#include <string>
#include <vector>
#include <unordered_map>
#include <algorithm>

using namespace std;

vector<int> solution(vector<string> genres, vector<int> plays) 
{
    vector<int> answer;
    unordered_map<string, vector<pair<int, int>>> songs;
    unordered_map<string, int> totalPlay;
    vector<pair<string, int>> genresVec;

    for (int i = 0; i < genres.size(); i++)
    {
        totalPlay[genres[i]] += plays[i];
        songs[genres[i]].push_back(make_pair(i, plays[i]));
    }

    for (auto val : totalPlay)
        genresVec.push_back(make_pair(val.first, val.second));

    sort(genresVec.begin(), genresVec.end(),
        [](pair<string, int> a, pair<string, int> b)
        {
            return a.second > b.second;
        });

    for (auto genre : genresVec)
    {
        auto songVec = songs[genre.first];
        sort(songVec.begin(), songVec.end(),
            [](pair<int, int> a, pair<int, int> b)
            {
                if (a.second == b.second)
                    return a.first < b.first;
                return a.second > b.second;
            });

        int cnt = 0;
        for (auto song : songVec)
        {
            answer.push_back(song.first);
            if (++cnt == 2)
                break;
        }
    }

    return answer;
}