프로그래머스에 있는 문제 중 베스트 엘범이라는 문제에 대해서 블로그를 작성하고자 한다.
문제
1. 장르에 속한 곡들의 플레이수 합이 높을 수록 먼저 출력
2. 장르에 속한 곡들 사이 플레이수가 높을 수록 먼저 출력
3. 최대 장르당 2개 출력
4. 인덱스를 출력
5. 장르에 속한 곡이 하나면 하나만 출력
해결
1. 장르별 합, 인덱스 리스트 처리
2. 합 별로 정렬
3. 해당 장르의 인덱스들 불러와 크기별로 정렬
4. 출력
(만약 장르에 속한 음악의 수가 1이면 그대로 출력)
코드
import java.util.*;
class Solution {
public List<Integer> solution(String[] genres, int[] plays) {
List<Integer> answer = new ArrayList<>();
HashMap<String, Integer> sum = new HashMap<>();
HashMap<String, List<List<Integer>>> check = new HashMap<>();
for(int i=0; i<genres.length; i++){
if(check.get(genres[i]) == null){
List<List<Integer>> now = new ArrayList<>();
now.add(Arrays.asList(plays[i], i));
check.put(genres[i], now);
sum.put(genres[i], plays[i]);
continue;
}
check.get(genres[i]).add(Arrays.asList(plays[i], i));
sum.put(genres[i], sum.get(genres[i])+plays[i]);
}
List<Integer> values = new ArrayList<>();
for(String key : sum.keySet()){
values.add(sum.get(key));
}
Collections.sort(values, Comparator.comparing(arr -> -arr));
for(int value : values){
for(String genre : sum.keySet()){
if(sum.get(genre) == value){
List<List<Integer>> now = check.get(genre);
Collections.sort(now, Comparator
.comparing((List<Integer> arr) -> -arr.get(0))
.thenComparing(arr -> arr.get(1)));
if(now.size() == 1){
answer.add(now.get(0).get(1));
continue;
}
for(int i=0; i<2; i++){
answer.add(now.get(i).get(1));
}
}
}
}
return answer;
}
}
'Algorithm > Practice' 카테고리의 다른 글
Programmers - 가장 큰수 with JAVA (+) (0) | 2023.05.10 |
---|---|
Programmers - 디스크 컨트롤러 with JAVA (0) | 2023.05.10 |
Programmers - 구명보트 with JAVA (0) | 2023.05.08 |
Programmers - 여행경로 with JAVA (0) | 2023.05.04 |
Programmers - 전력 망을 둘로 나누기 with JAVA (+) (0) | 2023.05.02 |