장르 별로 가장 많이 재생된 노래 두 개씩 모아 앨범 출시하려고 할 때 이 앨범에 들어갈 노래의 고유 번호를 순서대로 반환
→ 노래 수록 기준
→ classic 장르는 1450회 재생, pop 장르는 3100회 재생 → 장르 순서는 pop 다음 classic
→ 각 노래 안에서 2번 rule에 적용되어 4,1,3,0 순서로 앨범 수록
노래 별 장르, 노래 별 재생 횟수
베스트 앨범에 들어갈 노래의 고유번호를 순서대로 반환
리스트의 Add function은 void를 반환한다! → 특정 변수에 넣을려고 시도시 에러남
내림차순 정렬: sort + reverse 사용
using System;
using System.Collections.Generic;
using System.Linq;
public class Solution {
public int[] solution(string[] genres, int[] plays) {
List<int> answer = new List<int>();
// 1번 룰 적용 위한 장르 내 total song 개수 저장 위한 dictionary
Dictionary<string,int> totalPlayDict = new Dictionary<string,int>();
// 2,3번 룰 적용 위한 장르를 key로 하고 해당되는 song을 순서로 담고 있음
Dictionary<string,List<int>> genreDict = new Dictionary<string,List<int>>();
// 최종 결과 추출 위해 song 개수와 index 반환
Dictionary<int, List<int>> originDict = new Dictionary<int,List<int>>();
// 초기화
for(int i = 0; i < genres.Length; i++)
{
if(originDict.ContainsKey(plays[i])){originDict[plays[i]].Add(i);}
else{originDict[plays[i]] = new List<int>{i};}
if(totalPlayDict.ContainsKey(genres[i])){totalPlayDict[genres[i]] += plays[i];}
else{totalPlayDict[genres[i]] = plays[i];}
if(genreDict.ContainsKey(genres[i])){genreDict[genres[i]].Add(plays[i]);}
else{genreDict[genres[i]] = new List<int>{plays[i]};}
}
// 전체 노래 개수 고려해서 정렬해놓은 딕셔너리
var orderDict = totalPlayDict.OrderByDescending(x => x.Value);
foreach(KeyValuePair<string,int> dict in orderDict)
{
var songList = genreDict[dict.Key];
songList.Sort();
songList.Reverse();
int total = 0;
for(int i = 0; i < songList.Count; i++)
{
if(i == 2){break;}
if(originDict[songList[i]].Count > 1)
{
for(int j = 0; j < originDict[songList[i]].Count; j++)
{
if(total == 2) {break;}
if(genres[originDict[songList[i]][j]] == dict.Key)
{
answer.Add(originDict[songList[i]][j]);
total += 1;
}
}
}
else
{
answer.Add(originDict[songList[i]][0]);
total += 1;
}
}
}
return answer.ToArray();
}
}