프로그래머스 베스트앨범(genres) 정답 코드
뿌리튼튼 CS/Algorithm2019. 4. 15. 16:54
	
	난이도 ★★★☆☆
힌트
| Java 자료구조 및 Comparable 을 잘 이용하면 쉽게 구현할 수 있습니다. 해시문제인지 정렬문제인지 헷갈리네요. | 
이하는 코드입니다.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; public class Solution {     public int[] solution(String[] genres, int[] plays) {         Map<String, Integer> indexMap = new HashMap<>();         List<Genre> genreList = new ArrayList<>();         for (int i = 0; i < genres.length; i++) {             Genre genre;             Integer index = indexMap.get(genres[i]);             if (index == null) {                 genre = new Genre();                 genreList.add(genre);                 indexMap.put(genres[i], genreList.size() - 1);             }             else {                 genre = genreList.get(index);             }             Song song = new Song();             song.id = i;             song.play = plays[i];             genre.songs.add(song);             genre.sum += plays[i];         }         Collections.sort(genreList);         int count = 0;         for (Genre genre : genreList) {             Collections.sort(genre.songs);             if (genre.songs.size() > 1) {                 count += 2;             } else {                 count += 1;             }         }         int[] answer = new int[count];         int answerIdx = 0;         for (Genre genre : genreList) {             for (int i = 0; i < genre.songs.size() && i < 2; i++) {                 answer[answerIdx] = genre.songs.get(i).id;                 answerIdx++;             }         }         return answer;     }     private class Genre implements Comparable<Genre> {         int sum;         List<Song> songs;         public Genre() {             sum = 0;             songs = new ArrayList<>();         }         @Override         public int compareTo(Genre that) {             return Integer.compare(that.sum, this.sum); // order by sum desc         }     }     private class Song implements Comparable<Song> {         int id;         int play;         @Override         public int compareTo(Song that) {             if (this.play == that.play) {                 return Integer.compare(this.id, that.id); // order by id asc             }             return Integer.compare(that.play, this.play); // order by play desc         }     } } | cs | 
'뿌리튼튼 CS > Algorithm' 카테고리의 다른 글
| 프로그래머스 가장 큰 수(numbers) 정답 코드 (0) | 2019.04.15 | 
|---|---|
| 프로그래머스 K번째수(commands) 정답 코드 (1) | 2019.04.15 | 
| 프로그래머스 위장(clothes) 정답 코드 (0) | 2019.04.15 | 
| 프로그래머스 전화번호 목록(phone_book) 정답 코드 (0) | 2019.04.15 | 
| 프로그래머스 완주하지 못한 선수(participant) 정답 코드 (0) | 2019.04.15 | 
