[프로그래머스][Java] 베스트앨범 (Lv.3) - 해시

박현아·2024년 11월 6일
0

programmers-java

목록 보기
28/35

👩‍💻 문제

https://school.programmers.co.kr/learn/courses/30/lessons/42579

🙋‍♀️ 답변

import java.util.*;

class Solution {
    public int[] solution(String[] genres, int[] plays) {
        
        // 1. 장르별 총 재생 횟수를 구할 HashMap
        HashMap<String, Integer> genrePlayCount = new HashMap<>();
        
        // 2. 각 장르에 속한 곡들 (곡 인덱스와 재생 횟수)
        HashMap<String, List<int[]>> genreSongs = new HashMap<>();
        
        // 장르별 총 재생 횟수와 장르별 노래 목록 구하기
        for (int i = 0; i < genres.length; i++) {
            genrePlayCount.put(genres[i], genrePlayCount.getOrDefault(genres[i], 0) + plays[i]);
            genreSongs.putIfAbsent(genres[i], new ArrayList<>());
            genreSongs.get(genres[i]).add(new int[]{i, plays[i]});
        }

        // 3. 장르별로 총 재생 횟수가 많은 순으로 장르 정렬
        List<String> sortedGenres = new ArrayList<>(genrePlayCount.keySet());
        sortedGenres.sort((a, b) -> genrePlayCount.get(b) - genrePlayCount.get(a)); // 내림차순 정렬
        
        List<Integer> result = new ArrayList<>();
        
        // 4. 각 장르에 대해 노래를 재생 횟수 내림차순으로 정렬 후 최대 두 곡 선택
        for (String genre : sortedGenres) {
            List<int[]> songs = genreSongs.get(genre);
            songs.sort((a, b) -> b[1] - a[1]); // 재생 횟수 내림차순 정렬

            // 최대 두 곡만 추가
            for (int i = 0; i < Math.min(songs.size(), 2); i++) {
                result.add(songs.get(i)[0]); // 노래의 인덱스를 결과 리스트에 추가
            }
        }

        // 결과를 배열로 변환하여 반환
        return result.stream().mapToInt(i -> i).toArray();
    }
}

🤔

코테 전 공부할 시간이 촉박해서 일단 공부 용도로 chatgpt에서 가져온 답변,,
장르별 총 재생횟수까지는 구했는데 그 이후에서 막혔다 🥹
HashMap<String, List<int[]>> genreSongs = new HashMap<>(); 이렇게 HashMap은 한 번도 안 써봐서 공부 용도로 일단 기록해놓기.

0개의 댓글