하루에 한 문제
[프로그래머스 2020 KAKAO BLIND RECRUITMENT] 베스트앨범 -Java 본문
https://programmers.co.kr/learn/courses/30/lessons/42579
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
class Solution {
class Info implements Comparable<Info>{
int index, play;
public Info(int index, int play) {
this.index = index;
this.play = play;
}
@Override
public int compareTo(Info o) {
if(o.play==this.play) return this.index-o.index;
return o.play-this.play;
}
}
public int[] solution(String[] genres, int[] plays) {
List<Integer> answerList= new ArrayList<>();
Map<String, Integer> bestGenre = new HashMap<>();
HashMap<String, List<Info>> playOfGenre = new HashMap<>();
for(int i=0; i<genres.length; i++) {
if(bestGenre.containsKey(genres[i])) bestGenre.put(genres[i], bestGenre.get(genres[i])+plays[i]);
else bestGenre.put(genres[i], plays[i]);
if(!playOfGenre.containsKey(genres[i])) playOfGenre.put(genres[i], new ArrayList<>());
playOfGenre.get(genres[i]).add(new Info(i,plays[i]));
}
List<String> totalPlayList = new ArrayList<>(bestGenre.keySet());
Collections.sort(totalPlayList, (o1, o2) -> (bestGenre.get(o2).compareTo(bestGenre.get(o1))));
for(int i=0; i<totalPlayList.size(); i++) {
String genre=totalPlayList.get(i);
Collections.sort(playOfGenre.get(genre));
if(playOfGenre.get(genre).size()==1) answerList.add(playOfGenre.get(genre).get(0).index);
else {
for(int j=0; j<2; j++) {
answerList.add(playOfGenre.get(genre).get(j).index);
}
}
}
int[] answer= new int[answerList.size()];
int idx=0;
for(int index : answerList) {
answer[idx++]=index;
}
System.out.println(Arrays.toString(answer));
return answer;
}
}
소요시간 : 1시간
HashMap<String, Integer> bestGenre = new HashMap<>() 을 통해 가장 많이 재생된 장르를 찾았습니다.
HashMap<String, List<Info>> playOfGenre = new HashMap<>(); 를 통해 장르별 재생된 노래를 list로 넣었습니다.
playOfGenre를 List로 변경한뒤 Collections.sort를 통해 장르별 음악을 정렬합니다. 이 때 정렬 순서는 장르 내에서 가장 많이 재생된 노래를 기준으로 합니다.
각 장르별 노래를 저장하는데 아이디어가 쉽게 떠오르지 않아 시간이 조금 걸렸지만 이 부분만 빠르게 생각해낸다면 쉽게 풀 수 있는 문제인 것 같습니다.
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] H-Index -Java (0) | 2020.12.16 |
---|---|
[프로그래머스] 가장 큰 정사각형 찾기 -Java (0) | 2020.12.16 |
[프로그래머스] 가장 큰 수 -Java (0) | 2020.12.16 |
[프로그래머스 2020 KAKAO BLIND RECRUITMENT] 괄호 변환 -Java (0) | 2020.12.14 |
[프로그래머스 2020 KAKAO BLIND RECRUITMENT] 자물쇠와 열쇠 -Java (1) | 2020.12.14 |
Comments