[JS] level 3 - 베스트앨범

베스트앨범

문제 출처

https://programmers.co.kr/learn/courses/30/lessons/42579


풀이

function solution(genres, plays) {
    // 중복을 제외한 장르만 set에 저장
    const genresSet = new Set();
    genres.map((genre) => genresSet.add(genre));
    
    const arr = [];
    // 장르 set을 배열로 변환
    [...genresSet].map((genre) => {
      
        let sum = 0; // 장르별 재생된 노래 수의 합
        const index = []; // 노래의 index와 재생횟수 저장 배열
      
        genres.map((g, idx) => {
            if (g === genre) {
                sum += plays[idx];
                index.push({'idx': idx, 'times': plays[idx]});
            }
        });
        
      	// 재생횟수가 가장 많은 노래 순으로 정렬
        const sortedIndex = index.sort((a, b) => a.times > b.times ? -1 : a.times < b.times ? 1 : 0);
        arr.push({'genre': genre, 'sum': sum, 'idx': sortedIndex});
    });
  
    // 장르중에서 노래 재생 횟수가 제일 많은 순으로 정렬
    const result = arr.sort((a,b) => a.sum > b.sum ? -1 : a.sum < b.sum ? 1 : 0);
    
    const answer = [];
    // 장르별
    result.map((data) => {
        // 노래 횟수
        data.idx.map((d, index) => {
            // 재생횟수가 높은 순으로 정렬했으므로
            // 순서대로 두 개만 선택
            if (index < 2) {
             answer.push(d.idx);   
            }
        });
    });
    
    return answer;
}

좋은 웹페이지 즐겨찾기