https://programmers.co.kr/learn/courses/30/lessons/42579
코딩테스트 연습 - 베스트앨범
스트리밍 사이트에서 장르 별로 가장 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시하려 합니다. 노래는 고유 번호로 구분하며, 노래를 수록하는 기준은 다음과 같습니다. 속한 노래가
programmers.co.kr
어떤식으로 정렬할지 감이 잘 안와서 걍 brute force로 풀었다.
[내가 짠 코드]
import java.util.*;
class Solution {
public int[] solution(String[] genres, int[] plays) {
ArrayList<Integer> answerList = new ArrayList<>();
HashMap<String, Integer> genrePlay = new HashMap<>();
HashMap<Integer, Integer> song = new HashMap<>();
for(int i = 0; i < genres.length; i++){
genrePlay.put(genres[i], genrePlay.getOrDefault(genres[i], 0) + plays[i]);
song.put(i, plays[i]);
}
List<Map.Entry<String, Integer>> entryList = new LinkedList<>(genrePlay.entrySet());
entryList.sort(new Comparator<Map.Entry<String, Integer>>() {
@Override
public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
return o2.getValue() - o1.getValue();
}
});
List<Map.Entry<Integer, Integer>> songList = new LinkedList<>(song.entrySet());
songList.sort(new Comparator<Map.Entry<Integer, Integer>>(){
public int compare(Map.Entry<Integer, Integer> o1, Map.Entry<Integer, Integer> o2){
return o2.getValue() - o1.getValue();
}
});
for(Map.Entry<String, Integer> entry: entryList){
String genre = entry.getKey();
int count = 0;
for(Map.Entry<Integer, Integer> songEntry: songList){
if(count == 2)
break;
int key = songEntry.getKey();
if(genre.compareTo(genres[key]) == 0){
count++;
answerList.add(key);
}
}
}
int[] answer = new int[answerList.size()];
for(int i = 0; i < answerList.size(); i++){
answer[i] = answerList.get(i);
}
return answer;
}
}
[오늘 배운 것]
해시 value 값으로 내림차순 정렬하기
1. 일단 entrySet()으로 링크드리스트를 만든다.
2. 링크드 리스트를 comparator를 이용해서 정렬한다.
- 이 때, 내림차순으로 정렬할 경우 compare 메소드를 재정의한다.
[예시]
entryList.sort(new Comparator<Map.Entry<String, Integer>>() {
@Override
public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
return o2.getValue() - o1.getValue();
}
});
'Study Log > Algorithm' 카테고리의 다른 글
LeetCode 374. Guess Number Higher or Lower (0) | 2022.11.16 |
---|---|
잘 까먹는 자료구조들 (0) | 2022.06.03 |
Programmers / 정렬 - 가장 큰 수 (0) | 2021.04.18 |
Programmers / 정렬 - K번째 수 (0) | 2021.04.17 |
Programmers / Hash - 완주하지 못한 선수 (0) | 2021.04.06 |
댓글