ABC128 B問題 GuidebookをPythonのsortで解く
ABC128 B問題 Guidebook をPythonの優秀なsortメソッドを使って解きました。
レストランが存在する街と、レストランの評価が与えられます。
街の名前のアルファベット順で並べて、同じ街の名前の場合は評価の高い順に並べて、レストランの番号を出力する問題です。
例えば、
> 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 ドキュメントか、次の記事をおすすめします。
こういう解き方すると練習をしている気が全然しない。。。