function solution(genres, plays) {
var answer = [];
const obj = {}
// 1.
for(let i = 0; i < genres.length; i++){
obj[genres[i]] = obj[genres[i]] ? obj[genres[i]] + plays[i] : plays[i]
}
// obj = { classic: 1450, pop: 3100 }
// 2.
const entries = Object.entries(obj).sort((a, b) => b[1] - a[1])
// entries = [ [ 'pop', 3100 ], [ 'classic', 1450 ] ]
// 3.
const allInfoObj = genres.map((genre, index) => ({
genre,
index,
playCnt: plays[index]
}))
// allInfoObj = [
// { genre: 'classic', index: 0, playCnt: 500 },
// { genre: 'pop', index: 1, playCnt: 600 },
// { genre: 'classic', index: 2, playCnt: 150 },
// { genre: 'classic', index: 3, playCnt: 800 },
// { genre: 'pop', index: 4, playCnt: 2500 }
// ]
// 4.
entries.forEach((k, i) => {
const current = [];
for(let j = 0; j < allInfoObj.length; j++) {
if (k[0] === allInfoObj[j].genre) {
current.push(allInfoObj[j]);
}
}
// 5.
current.sort((a, b) => b.playCnt - a.playCnt);
current.forEach((c, i) => {
if (i < 2) {
answer.push(c.index)
}
})
})
return answer;
}
프로그래머스 기준 Level 3이다. 내 기준 3단계 치고는 어렵진 않았던 것 같다.
Array에서 find하는 것보다 Hash를 활용하여 바로 원하는 값을 찾아내는 것이 더 빠르다.
실무에서도 배열끼리 비교하는 경우가 많은데 Hash를 잘 활용하여 로직의 속도를 개선할 수 있다.