앨범 곡 수록순서의 조건은
총 플레이 횟수가 많은 장르가 먼저 수록되어야 하고 해당 장르 내에서는 각각 플레이가 많이된 순서이다. 각 곡의 플레이 횟수가 같다면 genres에 등록된 인덱스 순으로 한다.
#include <string>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
map<string, int> m_cnt, m_plays;
int compare(tuple<string,int,int> a, tuple<string,int,int> b)
{
if (m_plays[get<0>(a)] == m_plays[get<0>(b)]) return get<1>(a) > get<1>(b);//같은 장르면 각 플레이횟수로 비교
return m_plays[get<0>(a)] > m_plays[get<0>(b)];// 다른 장르면 총 플레이 횟수로 비교
}
vector<int> solution(vector<string> genres, vector<int> plays)
{
vector<int> answer;
vector<tuple<string,int,int>> v;
for(int i=0;i<genres.size();i++)
{
if(m_cnt[genres[i]] < 2) m_cnt[genres[i]]++;// 장르별 최대 2곡만 수록할것이기 때문에
m_plays[genres[i]] += plays[i];// 총 플레이 횟수
v.push_back({genres[i], plays[i], i});// 튜플로 {장르명, 플레이 횟수, 해당 인덱스}를 저장
}
sort(v.begin(), v.end(), compare);
for(auto c : v)
{
if(m_cnt[get<0>(c)])//해당 장르 곡선정 개수가 남아있다면
{
answer.push_back(get<2>(c));//해당 인덱스 추가
m_cnt[get<0>(c)]--;//곡선정 개수--
}
}
return answer;
}