코딩테스트/C++
[프로그래머스 Level 3] 베스트앨범(C++)
최-코드
2024. 6. 24. 13:11
코딩테스트 연습 - 베스트앨범 | 프로그래머스 스쿨 (programmers.co.kr)
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
구현 문제라고 보면 된다. priority_queue를 이용해서 재생횟수에 대해 내림차순, 고유 번호에 대해 오름차순으로 정렬해주면 된다.
#include <string>
#include <vector>
#include<queue>
#include<algorithm>
#include<map>
using namespace std;
struct element {
int c;
int n;
};
struct compare {
bool operator() (element a, element b) {
if (a.c == b.c) {
return a.n > b.n;
}
else {
return a.c < b.c;
}
}
};
priority_queue<element, vector<element>, compare> pq[101];
map<string, int> m;
pair<int, int> total[101];
vector<int> solution(vector<string> genres, vector<int> plays) {
vector<int> answer;
int c = 1;
for (int i = 0; i < genres.size(); i++) {
if (m[genres[i]] == 0) {
m[genres[i]] = c++;
}
element e;
e.c = plays[i];
e.n = i;
total[m[genres[i]]].first += plays[i];
total[m[genres[i]]].second = m[genres[i]];
pq[m[genres[i]]].emplace(e);
}
sort(total + 1, total + c, greater<>());
for (int i = 1; i < c; i++) {
int n = total[i].second;
int co = 0;
while (!pq[n].empty()&&co<2) {
answer.push_back(pq[n].top().n);
co++;
pq[n].pop();
}
}
return answer;
}