[JavaScript] 프로그래머스 Lv3 베스트 앨범

김민수·2023년 9월 25일

프로그래머스

목록 보기
1/7
post-thumbnail

📝 [Lv3 베스트 앨범]

입력

genres : 노래의 장르를 나타내는 문자열 배열
plays : 노래별 재생 횟수를 나타내는 정수 배열

제한

genres[i]는 고유번호가 i인 노래의 장르입니다.
plays[i]는 고유번호가 i인 노래가 재생된 횟수입니다.
genres와 plays의 길이는 같으며, 이는 1 이상 10,000 이하입니다.
장르 종류는 100개 미만입니다.
장르에 속한 곡이 하나라면, 하나의 곡만 선택합니다.
모든 장르는 재생된 횟수가 다릅니다.

출력

베스트 앨범에 들어갈 노래의 고유 번호를 순서대로 return

풀이

function solution(genres, plays) {
  const genreMap = {};
  
  for (let i = 0; i < genres.length; i++) {
    const genre = genres[i];
    const play = plays[i];

    if (!genreMap[genre]) genreMap[genre] = { totalPlays: 0, songs: [] };

    genreMap[genre].totalPlays += play;
    genreMap[genre].songs.push({ index: i, plays: play });
  }

  const genreList = Object.values(genreMap);

  genreList.forEach((genre) => genre.songs.sort((a, b) => b.plays - a.plays || a.index - b.index) );
  genreList.sort((a, b) => b.totalPlays - a.totalPlays);

  const result = [];
  
  genreList.forEach((genre) => {
    genre.songs.slice(0, 2).forEach((song) => {
      result.push(song.index);
    });
  });

  return result;
}

설명

  1. { 장르: { 토탈값: x, 노래들: [ [Object], [Object], [Object] ] } , ....} 형식 재구성
  2. 장르별 노래들 정렬 , 장르별 정렬
  3. 장르 앞에서부터 장르별 노래들 앞 2개 뺀 후, 넣기

0개의 댓글