1. 문제 풀이 아이디어
- 클래스를 만들어 문제에 제시된 기준으로 정렬을 한다.
- 정렬된 리스트에서 각 장르별로 두 곡만 선택해 리스트를 만들면 문제를 해결할 수 있다..
2. 나의 정답 코드
class Solution {
public int[] solution(String[] genres, int[] plays) {
List<Integer> resultList = new ArrayList<>();
List<Music> musicList = new ArrayList<>();
Map<String, Integer> playMap = new HashMap<>();
for (int i = 0; i < genres.length; i++) {
musicList.add(new Music(i, genres[i], plays[i]));
playMap.put(genres[i], playMap.getOrDefault(genres[i], 0) + plays[i]);
}
musicList.sort((o1, o2) -> {
if (playMap.get(o1.genre).equals(playMap.get(o2.genre))) {
if (o1.play == o2.play) {
return o1.index - o2.index;
}
return o2.play - o1.play;
}
return playMap.get(o2.genre) - playMap.get(o1.genre);
});
Map<String, Integer> countMap = new HashMap<>();
for (int i = 0; i < musicList.size(); i++) {
String genre = musicList.get(i).genre;
if (countMap.getOrDefault(genre, 0) == 2) {
continue;
}
countMap.put(genre, countMap.getOrDefault(genre, 0) + 1);
resultList.add(musicList.get(i).index);
}
return resultList.stream().mapToInt(i -> i).toArray();
}
}
class Music {
int index;
String genre;
int play;
Music(int index, String genre, int play) {
this.index = index;
this.genre = genre;
this.play = play;
}
}
3. 정리
Music
객체를 생성하여 곡 정보를 관리한다.
Map
을 활용해 장르별 총 재생 횟수를 계산하고 저장한다.
- 곡 리스트를 정렬하여 장르별 총 재생 횟수가 높은 순, 개별 재생 횟수가 높은 순, 인덱스가 작은 순으로 정렬한다.
- 정렬된 리스트에서
Map
을 활용하여 각 장르별 최대 두 곡까지 선택해 결과를 생성한다.
- 최종적으로 선택된 곡의 인덱스를 배열로 반환한다.
Share article