문제 URL : https://programmers.co.kr/learn/courses/30/lessons/42579
문제접근법 :
문제 그대로 적용하면됩니다. 해시이면서 정렬문제이고
시뮬레이션처럼 구현하면되는 문제이기에 따로 설명은 없을것같습니다.
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<string, int> music;
unordered_map<string, vector<pair<int, int>>> score;
priority_queue<pair<int, string>> 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 |
궁금한점 혹은 모르는점 어떤질문이든 댓글은 언제나 환영입니다.
'프로그래머스' 카테고리의 다른 글
프로그래머스 징검다리 (0) | 2021.07.25 |
---|---|
프로그래머스 이중우선순위큐 (0) | 2021.07.22 |
프로그래머스 N으로 표현 (0) | 2021.07.22 |
프로그래머스 헤비 유저가 소유한 장소 (0) | 2021.07.07 |
프로그래머스 다단계 칫솔 판매 (0) | 2021.07.07 |