[프로그래머스] 해시 : 베스트앨범(자바)

Rena·2022년 3월 31일
0

알고리즘 문제풀이

목록 보기
21/45
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;

class Solution {
    static class Music{
        String genre;
        int play;
        int idx;

        public Music(String genre, int play, int idx) {
            this.genre = genre;
            this.play = play;
            this.idx = idx;
        }
    }

    public int[] solution(String[] genres, int[] plays) {
        HashMap<String,Integer> map = new HashMap<>();
        for(int i = 0; i < genres.length; i++) {
            map.put(genres[i], map.getOrDefault(genres[i], 0)+ plays[i]);
        }

        //1. 장르 선정
        ArrayList<String> genreList = new ArrayList<>();
        while (map.size()!=0) {
            int max = 0;
            String max_key = "";
            for(String genre : map.keySet()) {
                int tmp_cnt = map.get(genre);
                if(tmp_cnt>max) {
                    max = tmp_cnt;
                    max_key = genre;
                }
            }
            genreList.add(max_key);
            map.remove(max_key);
        }

        //2. 장르 내 노래 선정
        ArrayList<Music> result = new ArrayList<>();
        for(String genre : genreList) {
            ArrayList<Music> list = new ArrayList<>();
            for(int i=0;i< genres.length;i++) {
                if(genres[i].equals(genre)) list.add(new Music(genre, plays[i], i));
            }
            Collections.sort(list,((o1, o2) -> o2.play - o1.play));
            result.add(list.get(0));
            if(list.size()!=1) {
                result.add(list.get(1));
            }
        }

        int[] answer = new int[result.size()];
        for(int i=0; i<result.size(); i++) {
            answer[i] = result.get(i).idx;
        }
        return answer;
    }

    public static void main(String[] args) {
        String[] genres = {"classic","pop","classic","classic","pop"};
        int[] plays = {500,600,150,800,2500};
        Solution st = new Solution();
        int[] res = st.solution(genres,plays);
        for(int i = 0; i<res.length; i++) {
            System.out.println(res[i]);
        }
    }
}
profile
일을 사랑하고 싶은 개발자

0개의 댓글