ボクサーのソート
1.問題リンク
https://programmers.co.kr/learn/courses/30/lessons/85002
2.解題コード&説明
def solution(wei, h2h):
l = len(wei)
win = [0]*l
w2H = [0]*l
for i in range(l) :
# 승률에 대해서
total = h2h[i].count("W") + h2h[i].count("L")
win[i] = h2h[i].count("W")/total if total else 0
# 무거운사람 이긴 횟수
for j in range(l) :
if wei[i] < wei[j] and h2h[i][j] == "W" :
w2H[i] += 1
dicts = []
for i in range(l) :
dicts.append({"index": i, "weight" : wei[i], "win" : win[i], "win_heavy" :w2H[i]})
dicts.sort(key= lambda x : (-x["win"], -x["win_heavy"], -x["weight"]))
return [x["index"]+1 for x in dicts]
→解説:1.もう起きられない詩!
2.並べ替えが必要な値に「データ」を加え、並べ替えではなく、体重/勝敗/勝率などの要素をそれぞれ並べ替え、列挙()を回して、それぞれの順序をデータに入れます.
->他人のコードを貼ることができないので省略します.
3. TIL
Lambda関数では,必要な順序で複数の要素をソートできることが分かった.
→並べ替え.sort(key = lambda x : ( x[0], -x[1] , x[2]))
->lambda x:後でtupleを入れると、tupleの最後の要素→最初の要素の順に並べ替えられます.「-」を付けると、reverse=trueとして並べ替えられます.
また,リストにリストや凡例がある場合にsort()関数を回転させると,内部リストの各データに基づいて自動的に複数回並べ替えられることも分かった.
演算時に「//」を乱用してはいけない.
4. TMI
初めて100名以内で完成したので、他の人のメッセージの前にアップしました.
Reference
この問題について(ボクサーのソート), 我々は、より多くの情報をここで見つけました https://velog.io/@nzlk112/복서-정렬하기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol