[알고리즘] 프로그래머스 베스트앨범 JAVA

[알고리즘] 프로그래머스 베스트앨범 JAVA

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

최적의 코드도 좋지만 이해하기 쉬운 코드를 짜고 싶다는 생각을 가지고 있다.

그런면에서 이번 코드는 실패한 느낌...

< 코드설명>

played 변수에 <장르,총 플레이 횟수>가 최종적으로 저장이 됨

genres_ordered에 총 플레이 횟수를 기준으로 내림차순으로 정렬이됨

Song 클래스를 만들고 result 변수를 통해 장르별로 곡을 저장하고 -> 이후에 재생횟수를 기준으로 내림차순으로 정렬

tmp_result 변수에 장르별 최대 2곡의 이름을 저장

마지막으로 tmp_result 사이즈 만큼 answer의 크기를 할당한 후 옮겨준다.

import java.util.*; import java.util.Map.Entry; class Solution { public int[] solution(String[] genres, int[] plays) { int[] answer = {}; HashMap played = new HashMap<>(); //장르별 재생횟수를 구한다. for(int i=0; i> genres_ordered = new ArrayList>(played.entrySet()); Mycomparator comp = new Mycomparator(); Collections.sort(genres_ordered, comp); ArrayList> result = new ArrayList<>(); ArrayList tmp_result = new ArrayList<>(); //장르가 같은곡의 리스트를 만들어준다. for( Entry gnr : genres_ordered){ ArrayList rlist = new ArrayList(); for(int j=0; j=2) for(int k=0; k<2; k++)tmp_result.add(rlist.get(k).idx); else tmp_result.add(rlist.get(0).idx); } answer = new int[tmp_result.size()]; for(int i=0; i{ String genre; int played; int idx; @Override public int compareTo(Song o2){ if(this.played > o2.played) return -1; else if(this.played == o2.played){ if(this.idx < o2.idx) return 1; } return 0; } public Song(String genre, int played, int idx){ this.genre = genre; this.played = played; this.idx = idx; } } static class Mycomparator implements Comparator> { @Override public int compare(Entry o1, Entry o2){ if(o1.getValue() < o2.getValue()) return 1; else if(o1.getValue() == o2.getValue()) return 0; else return -1; } } }

문제 푸신 분들 보면 다양하고 깔끔하게 푸신 분들이 많으니 참고 해주시면 될거같습니다!

from http://yourknow.tistory.com/22 by ccl(S) rewrite - 2021-10-29 07:28:10