[Programmers] 해시 - 베스트앨범

zzenee·2022년 10월 12일
0

Algorithm&Coding-test

목록 보기
29/30
post-thumbnail

https://school.programmers.co.kr/learn/courses/30/lessons/42579#

Problem

Code

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();
    }
}

Result

profile
꾸준히

0개의 댓글