https://school.programmers.co.kr/learn/courses/30/lessons/42579#
import java.util.*;
class Song implements Comparable<Song>{
public int num, play;
Song (int num, int play) {
this.num=num;
this.play=play;
}
@Override
public int compareTo (Song obj) {
if (this.play == obj.play) return this.num - obj.num;
else return obj.play - this.play;
}
}
class Solution {
public int[] solution(String[] genres, int[] plays) {
List<Integer> answer = new ArrayList<>();
HashMap<String, Integer> genMap = new HashMap<>();
HashMap<String, List<Song>> songMap = new HashMap<>();
for (int i=0; i<genres.length; i++) {
genMap.put(genres[i], genMap.getOrDefault(genres[i], 0) + plays[i]);
if (!songMap.containsKey(genres[i])) songMap.put(genres[i], new ArrayList<>());
songMap.get(genres[i]).add(new Song(i, plays[i]));
}
List<String> keySet = new ArrayList<>(genMap.keySet());
keySet.sort((a, b) -> genMap.get(b).compareTo(genMap.get(a)));
for (String key : keySet) {
List<Song> songList = songMap.get(key);
Collections.sort(songList);
answer.add(songList.get(0).num);
if (songList.size() > 1) answer.add(songList.get(1).num);
}
return answer.stream().mapToInt(i -> i).toArray();
}
}