프로그래머스 베스트 앨범 c++ map
2023. 10. 25. 19:10ㆍ알고리즘
vector<int> answer;
map<string, int> m;
map<int, string, greater<int>> M;
for (int i = 0;i < genres.size();i++) {
m[genres[i]] += plays[i];
}
for (auto it : m) {
M[it.second] = it.first;
}
M 이라고 선언한 map에 많이 재생된 순서로 노래를 정렬했다.
Map은 key 값을 기반으로 정렬이 되므로 key로 정렬한 후에 벡터로 담아서 다시 정렬을 해야한다.
이때 정렬을 위한 boolean 함수를 작성했다.
#include <string>
#include <vector>
#include <iostream>
#include <map>
#include <algorithm>
using namespace std;
bool cmp(pair<int, int> a, pair<int, int> b) {
if (a.first != b.first) {
return a.first > b.first;
}
return a.second < b.second;
}
vector<int> solution(vector<string> genres, vector<int> plays) {
vector<int> answer;
map<string, int> m; // 장르, 재생횟수
map<int, string, greater<int>> M; // 재생횟수, 장르
for (int i = 0;i < genres.size();i++) {
m[genres[i]] += plays[i];
}
for (auto it : m) {
M[it.second] = it.first;
}
for (auto it : M) {
vector<pair<int, int>> v; //재생횟수, 고유번호
for (int i = 0;i < genres.size();i++) {
if (genres[i] == it.second) {
v.push_back({ plays[i] , i});
}
}
sort(v.begin(), v.end(), cmp);
if (v.size() >= 2) {
for (int i=0;i<2;i++){
answer.push_back(v[i].second);
}
}
else {
answer.push_back(v[0].second);
}
}
return answer;
}
int main(void) {
vector<string> g = { "classic", "pop", "classic", "classic", "pop" };
vector<int> p = { 500, 600, 150, 800, 2500 };
solution(g, p);
return 0;
}
'알고리즘' 카테고리의 다른 글
프로그래머스 타겟넘버 c++ (0) | 2023.10.26 |
---|---|
프로그래머스 가장 먼 노드 c++ 그래프 탐색 (0) | 2023.10.25 |
프로그래머스 완주하지 못한 선수 해시 (0) | 2023.10.25 |
프로그래머스 폰켓몬 c++ unordered_map 해시 (0) | 2023.10.25 |
프로그래머스 N-Queen dfs backtracking C++ (0) | 2023.10.24 |