[JAVA] Map 사용 - 정렬 (프로그래머스 베스트앨범)

[JAVA] Map 사용 - 정렬 (프로그래머스 베스트앨범)

자주 사용되는 메소드 : put, containsKey, get

정렬

List> list = new ArrayLIst< (Map).EntrySet() >

으로 변환 후 List를 정렬하여 진행함.

ex) Map mGenres = new HashMap<>(); 에 대해 value 값 기준 내림차순 :

List< Entry > sortedGen = new ArrayList<>(mGenres.entrySet()); Collections.sort(sortedGen, new Comparator<>() { public int compare(Entry obj1, Entry obj2) { return obj2.getValue().compareTo(obj1.getValue()); } });

오름차순 할 때는

return obj1.getValue().compareTo(obj2.getValue());

전체 소스 코드:

import java.util.*; import java.util.Map.*; class Solution { public int[] solution(String[] genres, int[] plays) { int[] answer; List lAnswer = new ArrayList<>(); Map mGenres = new HashMap<>(); List< Map > lPlays = new ArrayList<>(); Map mGenresIdx = new HashMap<>(); for (int i=0; i < genres.length; i++) { String g = genres[i]; if (mGenres.containsKey(genres[i])) { mGenres.put(g, mGenres.get(g) + plays[i]); int idx = mGenresIdx.get(g); lPlays.get(idx).put(i, plays[i]); } else { mGenres.put(g, plays[i]); Map m = new HashMap<>(); m.put(i, plays[i]); lPlays.add(m); mGenresIdx.put(g, mGenresIdx.size()); } } List< Entry > sortedGen = new ArrayList<>(mGenres.entrySet()); Collections.sort(sortedGen, new Comparator<>() { public int compare(Entry obj1, Entry obj2) { return obj2.getValue().compareTo(obj1.getValue()); } }); for (Entry e : sortedGen) { String gen = e.getKey(); int idx = mGenresIdx.get(gen); List< Entry > sortedPlay = new ArrayList<>(lPlays.get(idx).entrySet()); Collections.sort(sortedPlay, new Comparator<>() { public int compare(Entry obj1, Entry obj2) { return obj2.getValue().compareTo(obj1.getValue()); } }); lAnswer.add(sortedPlay.get(0).getKey()); if (sortedPlay.size() > 1) lAnswer.add(sortedPlay.get(1).getKey()); } answer = new int[lAnswer.size()]; for (int i=0; i < lAnswer.size(); i++) { answer[i] = lAnswer.get(i); } return answer; } }

from http://whatsmyinterest.tistory.com/46 by ccl(A) rewrite - 2021-12-17 18:27:50