참고 : playCount.entrySet().stream()
.sorted((v1, v2) -> v2.getValue() - v1.getValue())
.map(v -> v.getKey())
링크 : https://school.programmers.co.kr/learn/courses/30/lessons/42579
import java.util.*;
import java.util.stream.Collectors;
class Solution {
public int[] solution(String[] genres, int[] plays) {
int[] answer = {};
//장르, 곡리스트
Map<String, List<Song>> genreSongs = new HashMap<>();
//초기값
for(int i=0; i< genres.length; i++){
genreSongs.put(genres[i], new ArrayList<>());
}
//장르 리스트에 곡 추가.
for(int i=0; i< genres.length; i++){
genreSongs.get(genres[i]).add(new Song(i, plays[i]));
}
//장르 리스트 정렬
for (String s : genreSongs.keySet()) {
List<Song> songs = genreSongs.get(s);
songs.sort((v1, v2)->v2.plays - v1.plays);
}
//장르 총 플레이수 리스트
Map<String, Integer> playCount = new HashMap<>();
for (String s : genreSongs.keySet()) {
List<Song> songs = genreSongs.get(s);
for (Song song : songs) {
playCount.put(s, playCount.getOrDefault(s, 0)+ song.plays);
}
}
//총 플레이수 정렬로 큰순서 대로 장르 추가.
List<String> collect = playCount.entrySet().stream()
.sorted((v1, v2) -> v2.getValue() - v1.getValue())
.map(v -> v.getKey())
.collect(Collectors.toList());
//곡 인덱스 리스트 생성후 최대 2개 추가.
List<Integer> indexes = new ArrayList<>();
for (String s : collect) {
List<Song> songs = genreSongs.get(s);
if(songs.size() >= 2){
indexes.add(songs.get(0).getIndex());
indexes.add(songs.get(1).getIndex());
}else{
indexes.add(songs.get(0).getIndex());
}
}
//변환
answer = indexes.stream().mapToInt(v -> v).toArray();
return answer;
}
public class Song{
int index;
int plays;
public Song(int index, int plays){
this.index = index;
this.plays = plays;
}
public int getIndex() {
return index;
}
@Override
public String toString() {
return "Song{" +
"index=" + index +
", plays=" + plays +
'}';
}
}
}
'교육 > 코테' 카테고리의 다른 글
[프로그래머스]JAVA 다리를 지나는 트럭 -스택/큐 (0) | 2022.07.06 |
---|---|
[프로그래머스]JAVA 프린터 -스택/큐 (0) | 2022.07.06 |
[프로그래머스]JAVA 위장-해시 (0) | 2022.07.05 |
[프로그래머스]JAVA 전화번호 목록 - 해시 (0) | 2022.07.05 |
[프로그래머스]JAVA 완주하지 못한 선수-해시 (0) | 2022.07.05 |