Programmers Hash Bestアルバム

2501 ワード

[Programmers Hash Lv.3]ベストアルバム


問題の説明


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

せいげんじょうけん

  • タイプ[i]は、固有番号iの楽曲タイプである.
  • play[i]は、唯一i番の曲が再生された回数である.
  • ジャンルはシナリオと同じ長さで、1以上10000以下である.
  • タイプは100個未満です.
  • タイプの1曲なら1曲のみ.
  • すべてのタイプの再生回数が異なります.
  • I/O例


    genres plays
    ["classic", "pop", "classic", "classic", "pop"][500, 600, 150, 800, 2500]
    return: [4, 1, 3, 0]

    I/O例説明


    クラシックタイプは1450話を放送し、クラシック曲は以下の通りである.
    ユニーク番号3:800再生
    ユニーク番号0:500再生
    ユニークナンバー2:150再生
    popタイプは3100回再生され、pop曲は以下の通りである.
    ユニーク番号4:2500再生
    ユニーク番号1:600再生
    そこで、まずポップタイプの[4,1]番の曲を収録し、クラシックタイプの[3,0]番の曲を収録します.

    Code

    def solution(genres, plays):
    
        answer = []
        genres_table = {}
        most_dict = {}
        
        #장르 별로 플레이된 고유번호와 그 고유번호의 플레이 수를 같이 리스트 형태로 저장한다.
        #장르 별로 몇번 플레이가 되었는지 합산 가능한 dictionary "most_dict"를 만든다.
        for i in range(len(genres)):
            try:
                genres_table[genres[i]].append([plays[i],i])
                most_dict[genres[i]] += plays[i]
            except:
                genres_table[genres[i]] = [[plays[i],i]]
                most_dict[genres[i]] = plays[i]
    
        #가장 많이 재생된 장르의 음악 순으로 정렬한다.
        genres_list = sorted(most_dict, key = lambda x: most_dict[x], reverse = True)
    
        #장르별로 저장된 고유번호와 그 플레이 횟수를 정렬한다.(플레이횟수가 많은 순서대로, 만약 플레이 횟수가 같다면 고유번호가 낮은 순서대로)
        for key in genres_table:
            genres_table[key].sort(key = lambda x:(-x[0],x[1]))
    
        #가장 많이 재생된 장르 순서대로 앨범을 작성한다.
        for genre in genres_list:
            temp = genres_table[genre]
            
            # 그장르의 음악이 1개이면 하나만 저장, 2개 이상이면 2개 저장한다.
            if len(temp) == 1:
                answer.append(temp[0][1])
            else:
                answer.append(temp[0][1])
                answer.append(temp[1][1])
    
        return answer

    コード摘要/解釈

  • タイプで再生された固有番号とその固有番号の再生数とをリスト形式で「genes table」に格納する.
  • 体裁に基づいて何回統計できる辞書「most dict」を作成した.
  • は、最も再生された音楽タイプに従ってソートされ、「タイプリスト」に格納される.
  • タイプに従って、格納された固有番号とその再生回数をソートする.(再生回数が多い順で、再生回数が同じであれば一意番号が低い順)
  • .
  • は、最も多く放送されたジャンル順にアルバムを制作する.このタイプの音楽は1つ1つ、2つ以上2つ保存します.
  • 結果と画面表示