https://programmers.co.kr/learn/courses/30/lessons/42579?language=java
1) 장르, 재생횟수, 인덱스 담을 Album 클래스 선언
2) getOrDefault() 활용하여 장르별 재생횟수 합 구함
3) Comparator 활용하여 재생횟수 내림차순 정렬
4) (3)의 key 순서대로, 동일한 장르의 곡을 temp_list에 저장
5) temp_list 재생횟수 내림차순, 인덱스 오름차순 정렬 후 1~2개 값 answer에 저장
import java.util.*;
class Solution {
class Album{
String genre;
Integer index;
Integer play;
public Album(String genre, Integer index, Integer play){
this.genre = genre;
this.index = index;
this.play = play;
}
public String getGenre(){
return this.genre;
}
public int getIndex(){
return this.index;
}
public int getPlay(){
return this.play;
}
}
public int[] solution(String[] genres, int[] plays) {
ArrayList<Album> temp_list = new ArrayList<>();
ArrayList<Integer> temp_answer = new ArrayList<>();
int[] answer;
int max = Integer.MIN_VALUE;
String maxGenre = "";
HashMap<String ,Integer> genre = new HashMap<String, Integer>();
ArrayList<Album> albums = new ArrayList<>();
//장르별 재생횟수
for(int i=0; i<genres.length; i++){
genre.put(genres[i], genre.getOrDefault(genres[i], 0) + plays[i]);
}
//재생횟수 내림차수 정렬
List<Map.Entry<String, Integer>> bestGenre = new ArrayList<>(genre.entrySet());
bestGenre.sort(new Comparator<Map.Entry<String, Integer>>(){
@Override
public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2){
return o2.getValue() - o1.getValue();
}
});
//많이 재생된 장르 순서대로 인덱스 구하기
for(Map.Entry<String, Integer> k : bestGenre){
//해당 장르의 재생횟수와 인덱스 저장
for(int i=0; i<genres.length; i++){
if(k.getKey().equals(genres[i])){
temp_list.add(new Album(genres[i], i, plays[i]));
}
}
//재생횟수 내림차, 인덱스 오름차순 정렬
temp_list.sort(new Comparator<Album>(){
@Override
public int compare(Album o1, Album o2){
if(o1.play == o2.play){
return o1.index - o2.index;
}else{
return o2.play - o1.play;
}
}
});
//해당 장르 곡 1개일 때, 1개만 저장
if(temp_list.size() == 1){
temp_answer.add(temp_list.get(0).getIndex());
}//해당 장르 곡 2개 이상일 때, 2개까지 저장
else if(temp_list.size() > 1){
temp_answer.add(temp_list.get(0).getIndex());
temp_answer.add(temp_list.get(1).getIndex());
}
//배열 초기화
temp_list.clear();
}
answer = new int[temp_answer.size()];
for(int i=0; i<temp_answer.size(); i++){
answer[i] = temp_answer.get(i);
}
return answer;
}
}