ボクサーのソート


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]
    →解説:
  • の勝率を求めるために、誰もが総戦闘回数(「W」があれば、「L」があれば)、勝つ回数(「W」)を得る.
  • が重者に勝った回数を救うため、(勝てば相手の重さは自分より重い).
  • の勝率で、重者は長回数、体重、自己インデックスを対象とします.次に、各データをリストに入れます.
  • 優先順位は勝率(大)>重の人が勝つ回数(大)>本人の重さ(大)>インデックス(小)なので、この順番は逆に並びます.
  • リスト内のデータのインデックス値をリストに変更して返します.
  • →ヘマンキャスト:勝率を100*勝の回数//総戦闘回数に変えて勝率に差が出て微妙な違いが区別できずうろうろ.計算するときは気をつけて、気をつけてください.
  • ベスト解答コード1-ペ春益
  • →解説:
    1.もう起きられない詩!
    2.並べ替えが必要な値に「データ」を加え、並べ替えではなく、体重/勝敗/勝率などの要素をそれぞれ並べ替え、列挙()を回して、それぞれの順序をデータに入れます.
  • ベスト解答コード2-Jehyuck
    ->他人のコードを貼ることができないので省略します.
  • →解説:
  • ディクシャナリーではなく、リスト形式で作られているので、これがもっといいようです.
  • から、ゼロまたは空のデータを含む完全な配列を作成し、append()なしできれいなデータを作成します.

  • 3. TIL


  • Lambda関数では,必要な順序で複数の要素をソートできることが分かった.
    →並べ替え.sort(key = lambda x : ( x[0], -x[1] , x[2]))
    ->lambda x:後でtupleを入れると、tupleの最後の要素→最初の要素の順に並べ替えられます.「-」を付けると、reverse=trueとして並べ替えられます.

  • また,リストにリストや凡例がある場合にsort()関数を回転させると,内部リストの各データに基づいて自動的に複数回並べ替えられることも分かった.

  • 演算時に「//」を乱用してはいけない.
  • 4. TMI


    初めて100名以内で完成したので、他の人のメッセージの前にアップしました.