[프로그래머스] 베스트앨범 - javascript

Yongwoo Cho·2021년 10월 8일
0

알고리즘

목록 보기
5/104
post-thumbnail

📌 문제

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

profile
Frontend 개발자입니다 😎

0개의 댓글