[python]ハッシュ:ベストアルバム
問題の説明
ストリーミングサイトでは、最も多く再生された曲を2曲集め、ベストアルバムを発売します.曲は唯一の番号で区切られており、収録曲の基準は以下の通りである.
まずは
せいげんじょうけん
I/O例
genresplaysreturn["classic", "pop", "classic", "classic", "pop"][500, 600, 150, 800, 2500][4, 1, 3, 0]
I/O例説明
クラシックタイプは1450話を放送し、クラシック曲は以下の通りである.
マイコード
初めての試み
def solution(genres, plays):
answer = []
gen_play_idx = dict()
total_gen_play = dict()
for i in range(len(genres)):
if genres[i] not in gen_play_idx:
gen_play_idx[genres[i]] = [(plays[i], i)]
total_gen_play[genres[i]] = plays[i]
else:
gen_play_idx[genres[i]].append((plays[i], i))
total_gen_play[genres[i]] += plays[i]
sorted_total_gen_play = sorted(total_gen_play.items(), reverse=True)
for key in sorted_total_gen_play:
song_list = gen_play_idx[key[0]]
song_list = sorted(song_list, reverse=True)
for i in range(len(song_list)):
if i == 2:
break
answer.append(song_list[i][1])
return answer
テスト1〉失敗(0.01 ms,10.4 MB)テスト2〉失敗(0.01 ms,10.3 MB)
試験3〉合格(0.01 ms,10.3 MB)
試験4〉合格(0.01 ms,10.3 MB)
テスト5〉失敗(0.08 ms,10.3 MB)
テスト6〉失敗(0.08 ms,10.1 MB)
テスト7〉失敗(0.04 ms,10.3 MB)
テスト8〉失敗(0.04 ms,10.3 MB)
テスト9〉失敗(0.02 ms,10.2 MB)
テスト10〉失敗(0.08 ms,10.2 MB)
テスト11〉失敗(0.02 ms,10.2 MB)
テスト12〉失敗(0.05 ms,10.2 MB)
テスト13〉失敗(0.08 ms,10.1 MB)
テスト14〉失敗(0.08 ms,10.3 MB)
テスト15〉失敗(0.02 ms,10.4 MB)
精度:13.3
合計:13.3/100.0
テスト例を追加してチェックしました.
genresplaysreturn["classic", "pop", "classic", "classic", "pop"][500, 600, 150, 800, 2500][4, 1, 3, 0]["classic", "pop", "classic", "classic", "pop"][500, 600, 500, 800, 2500][4, 1, 3, 0]
2番目のテストケースのように、同じタイプ内で同じ再生回数がある場合、3番目の条件により、まず固有番号の低い曲を収録し、インデックス2番の曲が収録されているため[4,1,3,2]の結果が得られる.
song_list = sorted(song_list, reverse=True)
このコードを修正すればいいはずです.2回目の試み
song list=sorded(song list,reverse=True)
song_list = sorted(song_list, key=lambda x: (-x[0], x[1]))
に改訂された.def solution(genres, plays):
answer = []
gen_play_idx = dict()
total_gen_play = dict()
for i in range(len(genres)):
if genres[i] not in gen_play_idx:
gen_play_idx[genres[i]] = [(plays[i], i)]
total_gen_play[genres[i]] = plays[i]
else:
gen_play_idx[genres[i]].append((plays[i], i))
total_gen_play[genres[i]] += plays[i]
sorted_total_gen_play = sorted(total_gen_play.items(), reverse=True)
for key in sorted_total_gen_play:
song_list = gen_play_idx[key[0]]
song_list = sorted(song_list, key=lambda x: (-x[0], x[1]))
for i in range(len(song_list)):
if i == 2:
break
answer.append(song_list[i][1])
return answer
テスト1〉失敗(0.01 ms,10.4 MB)テスト2〉失敗(0.01 ms,10.3 MB)
試験3〉合格(0.01 ms,10.3 MB)
試験4〉合格(0.01 ms,10.3 MB)
テスト5〉失敗(0.08 ms,10.3 MB)
テスト6〉失敗(0.08 ms,10.1 MB)
テスト7〉失敗(0.04 ms,10.3 MB)
テスト8〉失敗(0.04 ms,10.3 MB)
テスト9〉失敗(0.02 ms,10.2 MB)
テスト10〉失敗(0.08 ms,10.2 MB)
テスト11〉失敗(0.02 ms,10.2 MB)
テスト12〉失敗(0.05 ms,10.2 MB)
テスト13〉失敗(0.08 ms,10.1 MB)
テスト14〉失敗(0.08 ms,10.3 MB)
試験15〉合格(0.02 ms,10.4 MB)
精度:20.0
合計:20.0/100.0
あと1つで...
体裁の種類は100個未満と言われていますが、体裁の問題かもしれません.
genresplaysreturn["classic", "pop", "hiphop", "classic", "pop"][500, 600, 1400, 800, 2500][4, 1, 2, 3, 0]
ヒップホップスタイルに変えてテストしました「テストに合格しました」この問題ではありません.
3回目の試み
genresplaysreturn["classic", "pop", "classic", "classic", "pop"][500, 500, 500, 500, 500][0, 2, 1, 4]
今回はすべてのプレイ値を500にしました.
実行される結リンゴ値[1,4,0,2]は、基数[0,2,1,4]とは異なる.うん.パイは本当にデバッグしてみましょう.
sorded total gen playでは「classic」は1500ですが、popが最初に現れます.ここも上のようにラムダを入れてアレンジしてもいいです
ソートされたtotal gen play=sorded(total gen play.items()、reverse=True)
sorted_total_gen_play = sorted(total_gen_play.items(), key=lambda x: -x[1])
に変更def solution(genres, plays):
answer = []
gen_play_idx = dict()
total_gen_play = dict()
for i in range(len(genres)):
if genres[i] not in gen_play_idx:
gen_play_idx[genres[i]] = [(plays[i], i)]
total_gen_play[genres[i]] = plays[i]
else:
gen_play_idx[genres[i]].append((plays[i], i))
total_gen_play[genres[i]] += plays[i]
sorted_total_gen_play = sorted(total_gen_play.items(), key=lambda x: -x[1])
for key in sorted_total_gen_play:
song_list = gen_play_idx[key[0]]
song_list = sorted(song_list, key=lambda x: (-x[0], x[1]))
for i in range(len(song_list)):
if i == 2:
break
answer.append(song_list[i][1])
return answer
やっと...精度:100.0
合計:100.0/100.0
他人の考え
def solution(genres, plays):
genres_dict = {}
genres_list = []
for i in range(len(genres)):
if genres[i] not in genres_dict:
genres_dict[genres[i]] = []
genres_dict[genres[i]].append([i, plays[i]])
for g in genres_dict:
genres_dict[g].sort(key=lambda x: x[1], reverse=True)
genres_list.append([g, sum([play for _, play in genres_dict[g]])])
genres_list.sort(key=lambda x: x[1], reverse=True)
answer = []
for g, _ in genres_list:
answer.extend([x[0] for x in genres_dict[g][:2]])
return answer
私は調子を作って、それをディックシャーナに入れました.このコードはリストをディックシャーナに入れました.上の最初のfor文では、タイプをキーとして、Valueにインデックスと再生数からなるリストを追加します.2番目のfor文ではgenesリストで各タイプの合計を求めて挿入します.最後のfor文に最初の2つのインデックス値を追加します.Reference
この問題について([python]ハッシュ:ベストアルバム), 我々は、より多くの情報をここで見つけました https://velog.io/@fiifa92/해시-베스트앨범テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol