|
| 1 | +package problem42579; |
| 2 | + |
| 3 | +import java.util.*; |
| 4 | + |
| 5 | +public class BestAlbum { |
| 6 | + public static void main(String[] args) { |
| 7 | + var sol = new BestAlbum(); |
| 8 | + var genres1 = new String[]{"classic", "pop", "classic", "classic", "pop"}; |
| 9 | + var plays1 = new int[]{500, 600, 150, 800, 2500}; |
| 10 | + var expected1 = new int[]{4, 1, 3, 0}; |
| 11 | + var result1 = sol.solution(genres1, plays1); |
| 12 | + System.out.println("test1: expected: " + Arrays.toString(expected1) + ", result: " + Arrays.toString(result1)); |
| 13 | + } |
| 14 | + |
| 15 | + public int[] solution(String[] genres, int[] plays) { |
| 16 | + var genrePlays = new HashMap<String, Integer>(); |
| 17 | + var genreMusic = new HashMap<String, List<HashMap<Integer, Integer>>>(); |
| 18 | + for (int i = 0; i < genres.length; i++) { |
| 19 | + var genre = genres[i]; |
| 20 | + var play = plays[i]; |
| 21 | + genrePlays.put(genre, genrePlays.getOrDefault(genre, 0) + play); |
| 22 | + |
| 23 | + var music = new HashMap<Integer, Integer>(); |
| 24 | + music.put(i, play); |
| 25 | + var list = genreMusic.getOrDefault(genre, new ArrayList<>()); |
| 26 | + list.add(music); |
| 27 | + genreMusic.put(genre, list); |
| 28 | + } |
| 29 | + |
| 30 | + var genreList = new ArrayList<>(List.of(genrePlays.keySet().toArray(String[]::new))); |
| 31 | + genreList.sort((a, b) -> genrePlays.get(b) - genrePlays.get(a)); |
| 32 | + |
| 33 | + var answer = new ArrayList<Integer>(); |
| 34 | + for (var genre : genreList) { |
| 35 | + var musicList = genreMusic.get(genre); |
| 36 | + musicList.sort((a, b) -> b.values().iterator().next() - a.values().iterator().next()); |
| 37 | + var count = 0; |
| 38 | + for (var music : musicList) { |
| 39 | + answer.add(music.keySet().iterator().next()); |
| 40 | + count++; |
| 41 | + if (count == 2) { |
| 42 | + break; |
| 43 | + } |
| 44 | + } |
| 45 | + } |
| 46 | + return answer.stream().mapToInt(i -> i).toArray(); |
| 47 | + } |
| 48 | +} |
0 commit comments