https://programmers.co.kr/learn/courses/30/lessons/42579
function solution(genres, plays) {
var answer = [];
let sum_play = new Map();
let play_index = new Map();
for (let i = 0; i < genres.length; i++) {
sum_play.set(genres[i], (sum_play.get(genres[i]) || 0) + plays[i]);
play_index.set([plays[i], i], genres[i]);
}
const sum_play_sort = new Map(
[...sum_play.entries()].sort((a, b) => b[1] - a[1])
);
const play_index_sort = new Map(
[...play_index.entries()].sort((a, b) => b[0][0] - a[0][0])
);
for (let [k, v] of sum_play_sort) {
let cnt = 0;
for (let [k2, v2] of play_index_sort) {
if (v2 === k) {
answer.push(k2[1]);
cnt++;
if (cnt === 2) break;
}
}
}
return answer;
}
console.log(
solution(
["classic", "pop", "classic", "classic", "pop"],
[500, 600, 150, 800, 2500]
)
);
✔ sum_play : [ 장르이름, 그장르의 play수의 합]을 저장하는 map
✔ play_index : [(play수,index) 장르이름]을 저장하는 map
✔ sum_play_sort : sum_play를 value기준으로 내림차순 정렬
✔ play_index를 play수 기준으로 내림차순 정렬
✔ sum_play_sort를 순회하며 sum_play_sort의 key값과 play_index_sort에서 value값이 같으면 play의수가 높은순서대로 2개가 될때까지 ans배열에 push
✔ 난이도 : 프로그래머스 기준 LEVEL 3