Programmers Hash Bestアルバム
2501 ワード
[Programmers Hash Lv.3]ベストアルバム
問題の説明
ストリーミングサイトでは、最も多く再生された曲を2曲集め、ベストアルバムを発売します.曲は唯一の番号で区切られており、収録曲の基準は以下の通りである.
まずはたくさんの曲が流れているタイプを収录
まずはジャンル内で流れる曲を収録
タイプ内で同じ再生回数の曲には、まず固有番号の低い曲が収録される.
曲タイプを表す文字列配列タイプと、曲の再生回数を表す整数配列シナリオを指定する場合は、solution関数を完了し、最適なアルバムを入れる曲の一意の番号を順番に返します.
せいげんじょうけん
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
コード摘要/解釈
結果と画面表示
Reference
この問題について(Programmers Hash Bestアルバム), 我々は、より多くの情報をここで見つけました https://velog.io/@kakasi18/ProgrammersHash베스트-앨범テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol