# JAVA
import java.util.HashMap;
import java.util.ArrayList;
import java.util.Collections;
class Music {
String genre;
int play;
int idx;
public Music(String genre, int play, int idx) {
this.genre = genre;
this.play = play;
this.idx = idx;
}
}
class Solution {
public int[] solution(String[] genres, int[] plays) {
// 노래를 수록하는 기준
// 1. 속한 노래가 많이 재생된 장르를 먼저 수록합니다.
// 2. 장르 내에서 많이 재생된 노래를 먼저 수록합니다.
// 3. 장르 내에서 재생 횟수가 같은 노래 중에서는 고유 번호가 낮은 노래를 먼저 수록합니다.
HashMap<String, Integer> map = new HashMap<String, Integer>();
for (int i = 0; i < genres.length; i++) {
map.put(genres[i], map.getOrDefault(genres[i], 0) + plays[i]);
}
// 1. 속한 노래가 많이 재생된 장르 먼저 수록 : 장르 선택
ArrayList<String> genreArr = new ArrayList<String>();
while (map.size() != 0) {
int max = 0;
String genreStr = "";
for (HashMap.Entry<String, Integer> entry : map.entrySet()) {
if (max < entry.getValue()) {
max = entry.getValue();
genreStr = entry.getKey();
}
}
genreArr.add(genreStr);
map.remove(genreStr);
}
// 2. 장르내에서 많이 재생된 노래를 먼저 수록 : 장르별 노래 genreArr 순서대로 넣는다.
// 3. 장르 내에서 재생 횟수가 같은 노래 중에서는 고유 번호가 낮은 노래를 먼저 수록
ArrayList<Music> playsArr = new ArrayList<Music>();
for (String str : genreArr) {
ArrayList<Music> tmpArr = new ArrayList<Music>();
for (int i = 0; i < genres.length; i++) {
if (str.equals(genres[i])) {
tmpArr.add(new Music(str, plays[i], i));
}
}
Collections.sort(tmpArr, (o1, o2) -> o2.play - o1.play);
playsArr.add(tmpArr.get(0));
if (tmpArr.size() != 1) {
playsArr.add(tmpArr.get(1));
}
}
int[] result = new int[playsArr.size()];
for (int i = 0; i < playsArr.size(); i++) {
result[i] = playsArr.get(i).idx;
}
return result;
}
}
728x90
'IT > 알고리즘 문제' 카테고리의 다른 글
프로그래머스 - H Index (0) | 2021.09.13 |
---|---|
프로그래머스 - 가장 큰 수 (1) | 2021.09.13 |
프로그래머스 - 입양 시각 구하기(1) (0) | 2021.03.29 |
프로그래머스 - 동명 동물 수 찾기 (0) | 2021.03.29 |
프로그래머스 - 3진법 뒤집기 (0) | 2020.12.04 |