[프로그래머스] 코딩테스트 연습 - 해시 Level 3 베스트앨범

uoahy·2021년 9월 20일
0

Solution.java

import java.util.*;

class Solution {    
    public int[] solution(String[] genres, int[] plays) {
        int[] answer = {};
        
        HashMap<String, GenreData> hm = new HashMap<>();
        
        for (int i = 0; i < genres.length; i++) {
            GenreData gd;
            
            if (!hm.containsKey(genres[i])) {
                gd = new GenreData();
                hm.put(genres[i], gd);
            }
            else {
                gd = hm.get(genres[i]);
            }
            
            gd.add(plays[i], i);
        }
        
        PriorityQueue<GenreData> pq = new PriorityQueue<>();
        for (GenreData value : hm.values()) {
            pq.add(value);
        }
        
        ArrayList<Integer> al = new ArrayList<>();
        while (!pq.isEmpty()) {
            GenreData gd = pq.poll();
            
            PriorityQueue<SongData> sdpq = gd.pq;
            
            for (int i = 0; i < 2 && !sdpq.isEmpty(); i++) {
                al.add(sdpq.poll().idx);
            }
        }
        
        answer = new int[al.size()];
        
        for (int i = 0; i < al.size(); i++) {
            answer[i] = al.get(i);
        }
        
        return answer;
    }
}

class GenreData implements Comparable<GenreData> {
    int plays;
    PriorityQueue<SongData> pq;
        
    GenreData() {
        plays = 0;
        pq = new PriorityQueue<>();
    }
        
    void add(int play, int song) {
        plays += play;
        pq.add(new SongData(song, play));
    }
        
    public int compareTo(GenreData target) {
        return target.plays - this.plays;
    }
}

class SongData implements Comparable<SongData> {
    int idx;
    int play;
            
    SongData(int idx, int play) {
        this.idx = idx;
        this.play = play;
    }
            
    public int compareTo(SongData target) {
        return this.play != target.play ? target.play - this.play : this.idx - target.idx;
    }
}

그냥 프로그램을 하나 개발하는것같았던 문제였다. 클래스를 많이 만들어서 그런가?

comparable에 대해 공부할 수 있는 기회였다.

출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges

0개의 댓글