코딩테스트/Javascript
베스트 앨범
JWOOKJ
2024. 6. 12. 15:29
기존에 풀이했던 프로그래머스의 베스트 앨범의 개선 코드입니다.
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