
링크
고득점Kit- 해시- 베스트앨범
풀이 순서
- 배열을 해시맵으로 구성하기
- 각 장르에 대한 재생순서 count table 만들기
2.1 어떤 장르가 제일 많이 재생됐는지 순서 정하기
- 각 장르 내에서 어떤 인덱스의 숫자가 많이 재생됏는지 정하기
3.1 해당 숫자에 맞는 배열의 인덱스를 가져와서 answer에 삽입
내 코드
import java.util.*;
class Solution {
public int[] solution(String[] genres, int[] plays) {
Map<String, Integer> map = new HashMap<>();
for(int i = 0; i < genres.length; i++) {
map.put(genres[i], map.getOrDefault(genres[i], 0) + plays[i]);
}
//key값만 가져와서 genre에 넣어준다
ArrayList<String> genre = new ArrayList<>();
for(String key : map.keySet()) {
genre.add(key);
}
Collections.sort(genre, (o1, o2) -> map.get(o2) - map.get(o1)); //key값에 해당하는 value를 내림차순으로 정렬한다.
ArrayList<Integer> list = new ArrayList<>();
for(int i = 0; i < genre.size(); i++) {
String g = genre.get(i);
//해당 장르의 음악 중에서 play횟수가 가장 큰 인덱스를 찾는다
int max = 0;
int firstIdx = -1;
for(int j = 0; j < genres.length; j++) {
if(g.equals(genres[j]) && max < plays[j]) {
max = plays[j];
firstIdx = j;
}
}
//해당 장르의 음악 중에서 play횟수가 두번째로 큰 인덱스를 찾는다.
max = 0;
int secondIdx = -1;
for(int j = 0; j < genres.length; j++) {
if(g.equals(genres[j]) && max < plays[j] && j != firstIdx) {
max = plays[j];
secondIdx = j;
}
}
list.add(firstIdx);
if(secondIdx >= 0) list.add(secondIdx); //secondIdx는 존재 할수도, 안할수도 있다.
}
int[] result = new int[list.size()];
for(int i = 0; i < list.size(); i++) {
result[i] = list.get(i);
}
return result;
}
}