function solution(genres, plays) {
var answer = [];
let genreArr = [];
genres.forEach((gen, idx) => {
const currentCnt = plays[idx];
const hasIdx = genreArr.findIndex(g => g.name === gen);
if (hasIdx >= 0) {
genreArr[hasIdx].total += currentCnt;
genreArr[hasIdx].cntList.push({ order: idx, cnt: currentCnt });
} else {
genreArr.push({
name: gen,
total: currentCnt,
cntList: [{ order: idx, cnt: currentCnt }]
});
};
});
genreArr.sort((a,b) => a.total > b.total ? -1 : 1);
genreArr.forEach((gen) => {
gen.cntList.sort((a,b) => a.cnt > b.cnt ? -1 : a.cnt === b.cnt ? 1 : a.cnt < b.cnt ? 1 : -1);
gen.cntList.slice(0, 2).forEach(({ order }) => answer.push(order));
});
return answer;
}
1. 장르를 순회하며 새 배열에 필요한 객체 형태로 push해준다.
2. 우리가 알아야 할 값은, 장르별 총합과 index별 플레이 횟수이다.
3. 따라서, name, total, list<{order, cnt}> 구조로 객체를 정의해주었다.
4. 장르 total에 따라서 정렬
5. 장르 내 재생횟수 높은순 -> 고유번호 낮은순으로 정렬
6. 장르별로 두개씩 모아서 앨범을 출시한다고 했으므로, slice(0, 2)하여 출력
'개발, 코딩 > 알고리즘 공부' 카테고리의 다른 글
[백준] 재귀 - 팩토리얼 (0) | 2022.02.03 |
---|---|
JS. stack 구현 (배열없이) (0) | 2021.12.16 |
[알고리즘] 프로그래머스, 모의고사 (0) | 2021.11.02 |
[알고리즘] 프로그래머스, 위장 (0) | 2021.11.01 |
[알고리즘] 프로그래머스, 완주하지 못한 선수 (0) | 2021.11.01 |