반응형
https://school.programmers.co.kr/learn/courses/30/lessons/42579?language=java
import java.util.*;
class Solution {
List<Integer> answer = new ArrayList<>();
Map<String, Integer> genreTotalPlayMap = new HashMap<>();
Map<String, Map<Integer, Integer>> genreMusicMap = new HashMap<>();
public int[] solution(String[] genres, int[] plays) {
for (int i = 0; i < plays.length; i++) {
if (!genreTotalPlayMap.containsKey(genres[i])) {
Map<Integer, Integer> map = new HashMap<>();
map.put(i, plays[i]);
genreMusicMap.put(genres[i], map);
genreTotalPlayMap.put(genres[i], plays[i]);
continue;
}
genreMusicMap.get(genres[i]).put(i, plays[i]);
genreTotalPlayMap.put(genres[i], genreTotalPlayMap.get(genres[i]) + plays[i]);
}
List<String> genreList = new ArrayList<>(genreTotalPlayMap.keySet());
genreList.sort((s1, s2) -> genreTotalPlayMap.get(s2) - genreTotalPlayMap.get(s1));
for (String genre : genreList) {
Map<Integer, Integer> musicMap = genreMusicMap.get(genre);
List<Integer> musicPlayList = new ArrayList<>(musicMap.keySet());
musicPlayList.stream()
.sorted((s1, s2) -> musicMap.get(s2) - (musicMap.get(s1)))
.limit(2)
.forEach(music -> answer.add(music));
}
return answer.stream()
.mapToInt(Integer::intValue)
.toArray();
}
}
// 변경 후
Map<Integer, Integer> map = new HashMap<>();
map.put(i, plays[i]);
genreMusicMap.put(genres[i], map);
// 변경 전
genreMusicMap.put(genres[i], Map.of(i, plays[i]));
변경 전 으로 했었다가 에러가 났었다.
Map.of(...) 를 쓰면 수정불가능한데 이후 코드에서는 put으로 넣어서 에러가 난 거였다.
변경해주니 에러 없이 통과가 되었다.
반응형
'알고리즘 🤔' 카테고리의 다른 글
[프로그래머스 자바] 다리를 지나는 트럭 (Lv.2) (0) | 2024.05.22 |
---|---|
[백준 자바 2179] 비슷한 단어 (골드 4) (0) | 2024.05.21 |
[프로그래머스 자바] 방문 길이 (Lv.2) (0) | 2024.04.04 |
[백준 자바 1747] 소수&팰린드롬 (실버 1) (0) | 2024.04.03 |
[백준 자바 1182] 부분수열의 합 (실버 2) (0) | 2024.03.08 |