본 블로그는 비상업적, 비영리적 용도의 학업만을 위해 글을 게시합니다.
#include <string>
#include <vector>
#include <map>
#include <utility>
#include <algorithm>
using namespace std;
bool compare(const pair<int, int>& a, const pair<int, int>& b)
{
if(a.first == b.first)
return a.second < b.second;
return a.first > b.first;
}
bool compareOnlySecond(const pair<string, int>& a, const pair<string, int>& b)
{
return a.second > b.second;
}
vector<int> solution(vector<string> genres, vector<int> plays) {
vector<int> answer;
map<string, int> allPlays;
map<string, vector<pair<int, int>>> songs;
for(int i = 0; i < genres.size(); i++)
{
allPlays[genres[i]] += plays[i];
songs[genres[i]].push_back({plays[i], i});
}
vector<pair<string, int>> sortedAllPlays(allPlays.begin(), allPlays.end());
sort(sortedAllPlays.begin(), sortedAllPlays.end(), compareOnlySecond);
for(auto &song : songs)
sort(song.second.begin(), song.second.end(), compare);
for(auto &play : sortedAllPlays)
{
for(int i = 0; i < min(2, (int)songs[play.first].size()); i++)
answer.push_back(songs[play.first][i].second);
}
return answer;
}
#include <string>
#include <vector>
#include <unordered_map>
#include <algorithm>
#include <utility>
using namespace std;
bool compare (pair<int, int> left, pair<int, int> right){
if(left.first > right.first){
return true;
}else if(left.first == right.first){
if(left.second < right.second){
return true;
}
}
return false;
}
vector<int> solution(vector<string> genres, vector<int> plays) {
vector<int> answer;
unordered_map<string, int> summap;
unordered_map<string, vector<pair<int, int>>> genmap;
for (int i = 0; i < genres.size(); i++) {
summap[genres[i]] += plays[i];
genmap[genres[i]].push_back(make_pair(plays[i], i));
}
vector<pair<int, string>> fororder;
for (auto x : summap) {
fororder.push_back(make_pair(x.second, x.first));
}
sort(fororder.begin(), fororder.end());
while (fororder.size() > 0) {
pair<int, string> temp= fororder.back();
fororder.pop_back();
vector<pair<int, int>> a = genmap[temp.second];
sort(a.begin(), a.end(), compare);
int lastn = 2;
if (a.size() < 2) {
lastn = a.size();
}
for (int i = 0; i < lastn; i++) {
answer.push_back(a[i].second);
}
}
return answer;
}