NOTE/프로그래머스

베스트앨범

m-inz 2022. 4. 4. 13:06
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 정렬 이용하기 ,,, 메모