본문 바로가기
프로그래머스

프로그래머스 베스트앨범

by 콩순이냉장고 2021. 7. 22.

문제 URL : https://programmers.co.kr/learn/courses/30/lessons/42579

 

코딩테스트 연습 - 베스트앨범

스트리밍 사이트에서 장르 별로 가장 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시하려 합니다. 노래는 고유 번호로 구분하며, 노래를 수록하는 기준은 다음과 같습니다. 속한 노래가

programmers.co.kr

 

문제접근법 : 
문제 그대로 적용하면됩니다. 해시이면서 정렬문제이고

시뮬레이션처럼 구현하면되는 문제이기에 따로 설명은 없을것같습니다.

 

 

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
#include <bits/stdc++.h>
using namespace std;
 
vector<int> solution(vector<string> genres, vector<int> plays) {
    vector<int> answer;
    unordered_map<stringint> music;
    unordered_map<stringvector<pair<intint>>> score;
    priority_queue<pair<intstring>> pq;
 
    for (int i = 0; i < plays.size(); i++) {
        music[genres[i]] += plays[i];//모든 장르의 점수의합을구함
        score[genres[i]].push_back({ -plays[i],i });//장르의 점수들과 인덱스를 저장 내림차순으로 정렬하기위해 음수값을넣음
    }
 
    for (auto it : music) {
        pq.push({ it.second,it.first });//가장큰 점수의 장르가 정렬됨
    }
    while (!pq.empty()) {
        string name = pq.top().second;
        pq.pop();
        sort(score[name].begin(), score[name].end());
        if (score[name].size() >= 2) {//사이즈가 2이상이면 가장큰것 2개만 넣음
            answer.push_back({ score[name][0].second });
            answer.push_back({ score[name][1].second });
        }
        else
            answer.push_back({ score[name][0].second });
    }
    return answer;
}
cs

궁금한점 혹은 모르는점 어떤질문이든 댓글은 언제나 환영입니다.