해시, 정렬
genres.forEach((v, i) => {
if (album.has(v)) {
let temp = album.get(v);
temp[0] += plays[i];
temp.push([i, plays[i]]);
album.set(v, temp);
} else {
album.set(v, [plays[i], [i, plays[i]]]);
}
});
'classic' => [ 1450, [ 0, 500 ], [ 2, 150 ], [ 3, 800 ] ]
위와 같이 [재생 시간의 총 합, [고유 번호, 각 재생 시간], ... ]로 Map을 만들어 줍니다.
const album_list = [...album];
album_list.sort((a, b) => b[1][0] - a[1][0]);
album_list.forEach((v) => v[1].sort((a, b) => b[1] - a[1]));
Map을 배열로 변환 → 배열을 재생 시간의 총 합으로 내림차순 정렬 → 장르 내부의 각 고유 번호의 노래 재생시간 내림차순 정렬을 해줍니다.
album = new Map(album_list);
정렬한 배열을 다시 Map으로 바꿉니다.
album.forEach((v) => v.shift());
album.forEach((v) => {
v.forEach((v2, i) => {
if (i < 2) answer.push(v2[0]);
});
});
총 재생시간을 제거해주고, 앞에서부터 2개의 고유 번호를 정답 배열에 저장해줍니다.
function solution(genres, plays) {
const answer = [];
let album = new Map();
genres.forEach((v, i) => {
if (album.has(v)) {
let temp = album.get(v);
temp[0] += plays[i];
temp.push([i, plays[i]]);
album.set(v, temp);
} else {
album.set(v, [plays[i], [i, plays[i]]]);
}
});
const album_list = [...album];
album_list.sort((a, b) => b[1][0] - a[1][0]);
album_list.forEach((v) => v[1].sort((a, b) => b[1] - a[1]));
album = new Map(album_list);
album.forEach((v) => v.shift());
album.forEach((v) => {
v.forEach((v2, i) => {
if (i < 2) answer.push(v2[0]);
});
});
return answer;
}