in.add()
[42579] 베스트 앨범 본문
문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/42579
코딩테스트 연습 - 베스트앨범
스트리밍 사이트에서 장르 별로 가장 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시하려 합니다. 노래는 고유 번호로 구분하며, 노래를 수록하는 기준은 다음과 같습니다. 속한 노래가
programmers.co.kr
문제 해결 방법
해시 맵과 정렬을 사용했다.
import java.util.*;
class Solution {
ArrayList<Song> playlist;
ArrayList<Song> bestalbum;
HashMap<String, Integer> genremap;
HashMap<String, Integer> albummap;
class Song implements Comparable<Song>{
int id;
String genre;
int play;
public Song(int id, String genre, int play) {
this.id = id;
this.genre = genre;
this.play = play;
}
@Override
public int compareTo(Song s) {
if(this.play == s.play) {
return this.id - s.id;
} else if(this.play > s.play) {
return -1;
} else {
return 1;
}
}
}
public int[] solution(String[] genres, int[] plays) {
playlist = new ArrayList<>();
bestalbum = new ArrayList<>();
genremap = new HashMap<>();
albummap = new HashMap<>();
for(int i = 0; i < genres.length; i++) {
int id = i;
String genre = genres[i];
int play = plays[i];
playlist.add(new Song(id, genre, play));
if(!genremap.containsKey(genre)) {
genremap.put(genre, play);
} else {
genremap.put(genre, genremap.get(genre) + play);
}
}
Collections.sort(playlist, new Comparator<Song>(){
@Override
public int compare(Song s1, Song s2) {
if(s1.genre.equals(s2.genre)) {
return s1.compareTo(s2);
} else {
return genremap.get(s2.genre) - genremap.get(s1.genre);
}
}
});
for(Song s : playlist) {
if(!albummap.containsKey(s.genre)) {
albummap.put(s.genre, 1);
bestalbum.add(s);
} else {
if(albummap.get(s.genre) > 1) {
continue;
} else {
albummap.put(s.genre, 2);
bestalbum.add(s);
}
}
}
int[] answer = new int[bestalbum.size()];
for(int i = 0; i < answer.length; i++) {
answer[i] = bestalbum.get(i).id;
}
return answer;
}
}'Algorithm > Programmers' 카테고리의 다른 글
| [84021] 3주차_퍼즐 조각 채우기 (0) | 2021.10.29 |
|---|---|
| [42628] 이중우선순위큐 (0) | 2021.10.28 |
| [43162] 네트워크 (0) | 2021.10.26 |
| [62048] 멀쩡한 사각형 (0) | 2021.10.25 |
| [1844] 게임 맵 최단거리 (0) | 2021.10.16 |
Comments