[プログラマー/LV 2]ベストアルバム(JavaScript)


ベストアルバム


問題の説明


ストリーミングサイトでは、最も多く再生された曲を2曲集め、ベストアルバムを発売します.曲は唯一の番号で区切られており、収録曲の基準は以下の通りである.
まずはたくさんの曲が流れているタイプを収录
まずはジャンル内で流れる曲を収録
タイプ内で同じ再生回数の曲には、まず固有番号の低い曲が収録される.
整数配列のシナリオがある場合は、曲のタイプを表し、整数配列のシナリオは曲の再生回数を表します.
ソリューション関数を完了し、ベストアルバムを挿入する曲の一意の番号を順番に返します.

せいげんじょうけん


genres[i]はiという唯一のナンバーの曲です.
プレイ[i]は、iと番号付けされた唯一の曲の再生回数である.
genesはplaysと同じ長さで、1または10000未満です.
タイプは100種類未満です.
タイプの1曲であれば、1曲だけ選びます.
すべてのタイプで再生回数が異なります.

コード#コード#

function solution(genres, plays) {
    var answer = [];
    let genre = {}
    let genreName = []
    for (let i = 0; i< genres.length ;i++){
        if (!genre[genres[i]]){
            genre[genres[i]] = [[i, plays[i]]]
            genreName.push(genres[i])
        } else {
            genre[genres[i]] = [...genre[genres[i]], [i, plays[i]]]
            
        }
    }
    sumName = []
    for(g of genreName){
        let sum = 0
        v = genre[g]
        v.forEach(e => {
            sum += e[1]
        })
        v.sort((a, b) =>  
            b[1] - a[1]
        )
        sumName.push(sum)
    }
    
    while (true){
        if (Math.max(...sumName) === 0){
            break
        }
        maxidx = sumName.indexOf(Math.max(...sumName))
        sumName[maxidx] = 0
        MaxArray = genre[genreName[maxidx]]
        for(let i = 0;i<MaxArray.length && i< 2; i++){
            answer.push(MaxArray[i][0])
        }
    }
    return answer;
}