ㅁㄴㅇㄻㄴㅇㄹ

[코딩테스트] 프로그래머스 베스트앨범 with javascript 본문

코딩테스트

[코딩테스트] 프로그래머스 베스트앨범 with javascript

hanbin8269 2021. 5. 6. 13:59

문제 풀이 코드

function solution(genres, plays) {
    var answer = [];
    var genreDict = {};
    for (var i = 0; i < genres.length; i++){
        if (!(genres[i] in genreDict)){
            genreDict[genres[i]] = [];
        }
        genreDict[genres[i]].push([i, plays[i]]);  // #1
    }

    var genreOrder = Object.keys(genreDict).sort(function(a,b){ // #2
        var aSum = genreDict[a].map( x => x[1]).reduce(function(sum,currValue){
            return sum + currValue;
        }, 0);

        var bSum = genreDict[b].map( x => x[1]).reduce(function(sum,currValue){
            return sum + currValue;
        }, 0);
        return bSum - aSum;
    });

    for (var genre of genreOrder){  // #3
        genreDict[genre].sort(function(a,b){
            return b[1]- a[1];
        });
    }

    for (var genre of genreOrder){  // #4
        try{
            answer.push(genreDict[genre][0][0]);
            answer.push(genreDict[genre][1][0]);
        }catch(error){
            continue;
        }
    }
    return answer;
}

#1

{"장르" : [[인덱스, 재생 횟수]]} 데이터 구조를 가지도록 전처리 했다.

#2

장르 순서를 가진 genreOrder 배열을 만들었다..

#3

같은 장르 간의 정렬을 했다.

#4

각 장르별 가장 재생 수가 많은 두 노래의 인덱스를 answer에 추가했다.
empty array 오류가 났기 때문에 try catch 문으로 처리했다.