import java.util.ArrayList;
import java.util.List;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Collections;
import java.util.HashMap;
import java.util.Collections;
class Solution {
public int[] solution(String[] genres, int[] plays) {
ArrayList<Integer> result = new ArrayList<>();
Song[] songs = new Song[genres.length];
HashMap<String, ArrayList<Song>> genreSongs = new HashMap<>(); //장르별 노래
HashMap<String, Integer> genrePlays = new HashMap<>();//장르별 재생 횟수
for(int i=0; i<genres.length; i++){
songs[i]=new Song(i,genres[i],plays[i]);
if(genrePlays.containsKey(genres[i])){
genrePlays.put(genres[i],genrePlays.get(genres[i])+plays[i]);
}else{
genrePlays.put(genres[i],plays[i]);
}
if(genreSongs.containsKey(genres[i])){
ArrayList<Song> al = genreSongs.get(genres[i]);
al.add(songs[i]);
genreSongs.put(genres[i],al);
}else{
ArrayList<Song> al = new ArrayList<>();
al.add(songs[i]);
genreSongs.put(genres[i],al);
}
}
//장르 횟수 합 기준으로 정렬
ArrayList<String> keySetList = new ArrayList<>(genrePlays.keySet());
Collections.sort(keySetList,new Comparator<String>(){
@Override
public int compare(String a, String b){
return genrePlays.get(b)-genrePlays.get(a);
}
});
for(String s : keySetList){ //같은 장르
//같은 장르내에서 많이 재생된 노래 ~
ArrayList<Song> al = genreSongs.get(s);
Collections.sort(al, new Comparator<Song>(){
@Override
public int compare(Song s1, Song s2){
int temp = s2.plays-s1.plays;
if(temp==0){
temp = s1.id-s2.id;
}
return temp;
}
});
//최대 두개
int count = 1;
for(Song so : al){
if(count>2) break;
result.add(so.id);
count++;
}
}
int answer[] = new int[result.size()];
for(int i=0; i<result.size(); i++){
answer[i]=result.get(i);
}
return answer;
}
}
class Song{
int id;
String genre;
int plays;
public Song(int id,String genre,int plays){
this.id=id;
this.genre=genre;
this.plays=plays;
}
}
너무 더러워 더러워 흑흑
해시맵 정렬은,, keySet 정렬 이용하기 ,,, 메모