티스토리 뷰

algorithm

[프로그래머스] 베스트 앨범

지제로 2022. 9. 21. 11:08

풀이 과정

1. genres를 탐색하며 musicTotal과 genresTotal에 값을 더한다.

2. 장르를 정렬하기 위해서 벡터로 넣어서 정렬한다.

3. for문으로 musicTotal에서 장르별 횟수를 정렬한다.

4. count를 하여서 2개씩만 answer에 넣어준다.

 

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

bool cmp(const pair<string, int>& a, const pair<string, int>& b) {
    return a.second > b.second;
}

bool cmp2(const pair<int, int>& a, const pair<int, int>& b) {
    if (a.second == b.second)
        return a.first < b.first;
    return a.second > b.second;
}

vector<int> solution(vector<string> genres, vector<int> plays) {
    vector<int> answer;
    map<string, vector<pair<int, int>>> musicTotal;
    //장르별 두 노래만 
    map<string, int> genresTotal;
    for (int i = 0; i < genres.size(); i++) {
        musicTotal[genres[i]].push_back(make_pair(i, plays[i]));
        genresTotal[genres[i]] += plays[i];
    }
    vector<pair<string, int>> v(genresTotal.begin(), genresTotal.end());
    sort(v.begin(), v.end(), cmp);

    for (int i = 0; i < v.size(); i++) {
        printf("%s -  %d \n", v[i].first.c_str(), v[i].second);
    }

    for (auto& a : musicTotal) {
        sort(a.second.begin(), a.second.end(), cmp2);
    }

    for (int i = 0; i < v.size(); i++) {
        int count = 0;

        for (auto i : musicTotal[v[i].first]) {
            if (count == 2)
                break;
            answer.push_back(i.first);
            count++;
        }
    }

    return answer;
}
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함