import java.util.*;
class Solution {
public int[] solution(String[] genres, int[] plays) {
ArrayList<Integer> answer = new ArrayList<>();
HashMap<String, Integer> genresCnt = new HashMap<>(); // 장르별 총 재생횟수
HashMap<String, HashMap<Integer,Integer>> musicCnt = new HashMap<>(); // 장르별, 인덱스별
for(int i = 0; i<genres.length; i++){
if(!genresCnt.containsKey(genres[i])){
genresCnt.put(genres[i],plays[i]);
HashMap<Integer, Integer> index = new HashMap<>();
index.put(i, plays[i]);
musicCnt.put(genres[i], index);
} else{
genresCnt.put(genres[i],genresCnt.get(genres[i]) + plays[i]);
musicCnt.get(genres[i]).put(i,plays[i]);
}
}
// 속한 노래가 많이 재생된 장르 순으로 key 정렬 -> map은 정렬이 안되니까
List<String> keySet = new ArrayList<>(genresCnt.keySet());
keySet.sort((v1,v2) -> genresCnt.get(v2) - genresCnt.get(v1));
// 정렬된 key 순으로 돌면서 많이 재생된 장르 찾기
for(String key : keySet){
HashMap<Integer, Integer> indexMap = musicCnt.get(key);
List<Integer> indexKey = new ArrayList(indexMap.keySet());
// 마찬가지로 많이 재생된 노래 순으로 key 정렬
indexKey.sort((i1, i2) -> indexMap.get(i2) - indexMap.get(i1));
answer.add(indexKey.get(0));
if(indexKey.size()>1){
answer.add(indexKey.get(1));
}
}
return answer.stream()
.mapToInt(i -> i)
.toArray();
}
}