ABC128 B問題 GuidebookをPythonのsortで解く

ABC128 B問題 Guidebook をPythonの優秀なsortメソッドを使って解きました。

atcoder.jp

レストランが存在する街と、レストランの評価が与えられます。
街の名前のアルファベット順で並べて、同じ街の名前の場合は評価の高い順に並べて、レストランの番号を出力する問題です。

例えば、

> khabarovsk 20
moscow 10
kazan 50
kazan 35
moscow 60
khabarovsk 40

の場合は、kazan 50(3番目) -> kazan 35(4番目) -> khabarovsk 40(6番目) -> khabarovsk 20(1番目) -> moscow 60(5番目) -> moscow 10(2番目)という順になります。


特に頭を使わず、Pythonの優秀なsortedメソッドを使おうと思いました。
sortedを使うと、名前順でソートしてから、点数順でソートすることができます。
データを読み込むときに、2次元配列にして、それぞれの要素の中の配列のインデックス0をレストラン名、インデックス1を点数、インデックス2をレストラン番号として格納しました。

for i in range(N):
    c, p = input().split()
    p = int(p)
    data.append([c, p, i + 1])

あとは、レストラン名、点数の順でソートします。
点数は降順でソートしたいので、マイナスをつけています。

sorted_data = sorted(data, key=lambda x: (x[0], -x[1]))

全体のコードは以下のようになりました。

N = int(input())
data = []
for i in range(N):
    c, p = input().split()
    p = int(p)
    data.append([c, p, i + 1])
sorted_data = sorted(data, key=lambda x: (x[0], -x[1]))
for d in sorted_data:
    print(d[2])

sortedの使い方についてはソート HOW TO — Python 3.9.2 ドキュメントか、次の記事をおすすめします。

pashango-p.hatenadiary.org

こういう解き方すると練習をしている気が全然しない。。。