/**
* 베스트 앨범
* 해시
* https://programmers.co.kr/learn/courses/30/lessons/42579?language=javascript
*/
function solution(genres, plays) {
let answer = [];
const maxTotal = {}, maxGenre = {};
genres.forEach((genre, idx) => {
!maxTotal[genre] ? maxTotal[genre] = plays[idx] : maxTotal[genre] += plays[idx];
!maxGenre[genre] ? maxGenre[genre] = [{value: plays[idx], index: idx}] : maxGenre[genre].push({value: plays[idx], index: idx});
});
Object.keys(maxTotal).map((genre) => {
return { name: genre, total: maxTotal[genre] };
})
.sort((a, b) => b.total - a.total)
.forEach((obj) => {
maxGenre[obj.name].sort((a, b) => b.value - a.value);
for (let i = 0; i<2; i++) {
const top = maxGenre[obj.name][i];
if (top) answer = answer.concat(top.index);
}
});
return answer;
}
console.log(solution(["classic", "pop", "classic", "classic", "pop"], [500, 600, 150, 800, 2500]));
sort 를 사용할 때 모두 내림차순 처리해줬는데,
forEach 함수 내부의 두 번째 sort의 경우 내림차순으로 하지 않을 경우 플레이 횟수가 같은 곡 중 index 가 우선되는 값이 뒤로 밀리면서 2가지 테스트 케이스 통과를 못한다. 유의하자.
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스][자바스크립트][Level2] 가장 큰 수 (0) | 2022.01.04 |
---|---|
[프로그래머스][자바스크립트][Level1] 없는 숫자 더하기 (0) | 2022.01.04 |
[프로그래머스][자바스크립트][Level2] 다리를 지나는 트럭 (0) | 2022.01.03 |
[프로그래머스][자바스크립트][Level2] 프린터 (0) | 2022.01.03 |
[프로그래머스][자바스크립트][Level2] 소수 찾기 (0) | 2022.01.03 |
댓글