[プログラマー]ベストアルバム-javascript


📌 質問する


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 su,index)タイプ名]を格納するmap
✔sum play sort:sum play valueの降順ソート
プレイindexをプレイ数とする降順ソート
✔sum play sort、sum play sortのキー値がplay index sortの値と同じであればans配列でplayのカウントが高い順2になるまでpushします.
✔難易度:プログラマー標準LEVEL 3