https://school.programmers.co.kr/learn/courses/30/lessons/42579
문제 접근
- <장르, 그 장르의 총 플레이 수> 를 저장하는 totalGenresPlay
- <장르, <고유번호, 플레이 수> > 를 저장하는 musicTable
- 위 두 HashMap을 for loop로 생성
- 속한 노래가 많이 재생된 장르를 먼저 수록하기 위해, totalGenresPlay의 value값 기준으로 내림차순 sort하여 장르(String)을 저장하는 새 sortedKeyList 생성
- sortedKeyList를 순회하면서 musicTable의 저장된 장르의 HashMap<고유번호, 플레이 수> 를 불러오고
- 플레이 수 기준으로 내림차순 정렬한다.
- 2개의 곡을 뽑고 answer에 넣는다.
코드
import java.util.*;
class Solution {
public int[] solution(String[] genres, int[] plays) {
List<Integer> answer = new ArrayList<>();
HashMap<String, Integer> totalGenresPlay = new HashMap<>();
HashMap<String, HashMap<Integer, Integer>> musicTable = new HashMap<>();
for (int i = 0; i < genres.length; i++) {
if (!totalGenresPlay.containsKey(genres[i])) {
totalGenresPlay.put(genres[i], plays[i]);
HashMap<Integer, Integer> newMusic = new HashMap<>();
newMusic.put(i, plays[i]);
musicTable.put(genres[i], newMusic);
} else {
musicTable.get(genres[i]).put(i, plays[i]);
totalGenresPlay.put(genres[i], totalGenresPlay.get(genres[i]) + plays[i]);
}
}
List<String> sortedKeyList = new ArrayList<>(totalGenresPlay.keySet());
sortedKeyList.sort((s1, s2) -> totalGenresPlay.get(s2) - (totalGenresPlay.get(s1)));
for (String genre : sortedKeyList) {
HashMap<Integer, Integer> music = musicTable.get(genre);
List<Integer> musicPlays = new ArrayList<>(music.keySet());
musicPlays.sort((s1, s2) -> music.get(s2) - (music.get(s1)));
answer.add(musicPlays.get(0));
if (musicPlays.size() > 1) {
answer.add(musicPlays.get(1));
}
}
return answer.stream().mapToInt(Integer::intValue).toArray();
}
}
'Development > PS' 카테고리의 다른 글
[Queue] 프로그래머스 level 2 기능개발 java 풀이 (0) | 2024.01.07 |
---|---|
[DFS] 프로그래머스 level 3 네트워크 java 풀이 (0) | 2024.01.01 |
[Hash]프로그래머스 level 2 의상 java 풀이 (2) | 2023.12.22 |
[DP] 프로그래머스 level 3 N 으로 표현 Python 풀이 (1) | 2023.12.05 |
[DFS] 프로그래머스 level 2 타켓넘버 Python 풀이 (0) | 2023.12.05 |