코딩테스트 문제풀이
[프로그래머스] 베스트앨범 - 해시
지잉지잉
2021. 10. 2. 16:25
문제
풀이
import java.util.*;
class Solution {
public int[] solution(String[] genres, int[] plays) {
int[] answer = {};
List<Integer> answerList = new ArrayList<Integer>();
Map<String, Integer> genresPlayCount = new HashMap<String, Integer>();
for (int i = 0; i < genres.length; i++) {
String genre = genres[i];
int playCount = plays[i];
genresPlayCount.put(genre, genresPlayCount.getOrDefault(genre, 0) + playCount);
}
List<String> genreRankList = new ArrayList<String>(genresPlayCount.keySet());
Collections.sort(genreRankList, (o1, o2) -> (genresPlayCount.get(o2)-genresPlayCount.get(o1)));
for (String genre : genreRankList) {
Map<Integer, Integer> songIndexMap = new HashMap<Integer, Integer>();
for (int i = 0; i < genres.length; i++) {
if (genres[i].equals(genre)) {
songIndexMap.put(i, plays[i]);
}
}
List<Integer> idxList = new ArrayList<Integer>(songIndexMap.keySet());
Collections.sort(idxList, (o1, o2) -> (songIndexMap.get(o2)-songIndexMap.get(o1)));
answerList.add(idxList.get(0));
if (idxList.size() > 1) answerList.add(idxList.get(1));
}
answer = new int[answerList.size()];
for (int i = 0; i < answerList.size(); i++) {
answer[i] = answerList.get(i);
}
return answer;
}
}
- genres[]를 장르별로 play 횟수를 모두 더해 HashMap 생성한다. (genresPlayCount)
- genresPlayCount를 playCount 내림차순으로 정렬한다.
- genresPlayCount의 genre별 play가 가장 많이된 곡의 idx를 HashMap 생성한다.(songIdxMap)
- songIdxMap을 playCount 내림차순 정렬한다.
- 최대 2곡까지 answer 배열에 추가한다.
출처: https://programmers.co.kr/learn/courses/30/lessons/42579