[プログラマー][ハッシュ]ベストアルバム
私の髪の草
from collections import defaultdict
def solution(genres, plays):
answer = []
genre_play_total_cnt = defaultdict(lambda: 0)
for genre, play in zip(genres, plays):
genre_play_total_cnt[genre] += play
genre_rank = [genre for genre, play in sorted(genre_play_total_cnt.items(), key = lambda x:x[1], reverse=True)]
genre_play = defaultdict(lambda: [])
for i in range(0, len(genres)):
genre_play[genres[i]] += [[i, plays[i]]]
for genre in genre_rank:
result = sorted(genre_play[genre], key = lambda x: (x[1]), reverse=True)
if len(result) > 1:
answer.append(result[0][0])
answer.append(result[1][0])
else :
answer.append(result[0][0])
return answer
この問題はdictとlistを自由に使うことを学ばなければ解けない(難しいことを意味する).解答を参照して、解答とは言えません.プロセス全体を理解するには、
1.まず各タイプの再生回数の総和(gene play total cnt)を求める.
2.このdictを用いて、ソートにより再生順にソートされたGeneral rankを求める.
3.各タイプのインデックスと再生回数を保存するGeneral play dicksherを作成します.
4.再生回数の降順に並べ、2つまたは1つを入れます.
(gene rankではdict.items()という名前の関数が使用され、key、Valueペアをdict itemsオブジェクトに返す関数です.このオブジェクトの可用性はリストと同じです.)
この場合、sort時にlambda x:(x[1],x[0])を入れると、インデックスも降順に並べられ、答えが間違ってしまうことに注意してください(最初の試みに失敗すると、インデックスは昇順に並べられます).また、結果リストは常に2つ以上ではない場合があります.したがって、2つをランダムに入れると、ランタイムエラー(2回目の試行に失敗)が発生する可能性があります.
これはディック・シャナリー、リストのソートに慣れている問題だと思います.忘れる前に解いてみよう
Reference
この問題について([プログラマー][ハッシュ]ベストアルバム), 我々は、より多くの情報をここで見つけました https://velog.io/@sewonkim/프로그래머스해시-베스트앨범テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol