Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
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
Tags
more
Archives
Today
Total
관리 메뉴

히콩쓰 개발 일지

[프로그래머스_베스트앨범/Java] 본문

카테고리 없음

[프로그래머스_베스트앨범/Java]

용히콩 2024. 5. 20. 23:01
import java.util.*;

class Solution {
    public int[] solution(String[] genres, int[] plays) {
        ArrayList<Integer> answer = new ArrayList<>();

        HashMap<String, Integer> genresCnt = new HashMap<>(); // 장르별 총 재생횟수
        HashMap<String, HashMap<Integer,Integer>> musicCnt = new HashMap<>(); // 장르별, 인덱스별 

        for(int i = 0; i<genres.length; i++){
            if(!genresCnt.containsKey(genres[i])){
                genresCnt.put(genres[i],plays[i]);

                HashMap<Integer, Integer> index = new HashMap<>();
                index.put(i, plays[i]);
                musicCnt.put(genres[i], index);
            } else{
                genresCnt.put(genres[i],genresCnt.get(genres[i]) + plays[i]);
                musicCnt.get(genres[i]).put(i,plays[i]);
            }
        }
        // 속한 노래가 많이 재생된 장르 순으로 key 정렬 -> map은 정렬이 안되니까
        List<String> keySet = new ArrayList<>(genresCnt.keySet());
        keySet.sort((v1,v2) -> genresCnt.get(v2) - genresCnt.get(v1));

        // 정렬된 key 순으로 돌면서 많이 재생된 장르 찾기
        for(String key : keySet){
            HashMap<Integer, Integer> indexMap = musicCnt.get(key);
            List<Integer> indexKey = new ArrayList(indexMap.keySet());

            // 마찬가지로 많이 재생된 노래 순으로 key 정렬
            indexKey.sort((i1, i2) -> indexMap.get(i2) - indexMap.get(i1));

            answer.add(indexKey.get(0));
            if(indexKey.size()>1){
                answer.add(indexKey.get(1));
            }
        }
        return answer.stream()
                .mapToInt(i -> i)
                .toArray();
    }
}