기존에 풀이했던 프로그래머스의 베스트 앨범의 개선 코드입니다.

 

2022.02.07 - [코딩테스트/Javascript] - 베스트 앨범

 

베스트 앨범

#문제 스트리밍 사이트에서 장르 별로 가장 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시하려 합니다. 노래는 고유 번호로 구분하며, 노래를 수록하는 기준은 다음과 같습니다. 속한 노

jwookj.tistory.com

 

 

#풀이

const solution = (genres, plays) => {
  const genreMap = new Map();

  genres.map((genre, index) => [genre, plays[index]]).forEach(([genre, play], index) => {
    const musicData = genreMap.get(genre) || { total: 0, songs: [] }
    genreMap.set(genre, {
      total: musicData.total + play,
      songs: [...musicData.songs, { play, index }]
        .sort((a, b) => b.play - a.play)
        .slice(0, 2)
    })
  })

  return [...genreMap.entries()].
    sort((a, b) => b[1].total - a[1].total).
    flatMap(genre => genre[1].songs).
    map(song => song.index);
}

 

 

flatMap 메서드는 반환하는 요소에 대해 한단계 평탄화를 적용한 배열을 반환합니다.

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/flatMap

 

Array.prototype.flatMap() - JavaScript | MDN

Array 인스턴스의 flatMap() 메서드는 배열의 각 요소에 주어진 콜백 함수를 적용한 다음 그 결과를 한 단계씩 평탄화하여 형성된 새 배열을 반환합니다. 이 메서드는 map() 뒤에 깊이 1의 flat()을 붙이

developer.mozilla.org


 

'코딩테스트 > Javascript' 카테고리의 다른 글

프린터  (0) 2022.02.07
기능개발  (0) 2022.02.07
베스트 앨범  (0) 2022.02.07
위장  (0) 2022.01.26
콜라츠 추측  (0) 2021.06.25

+ Recent posts