AtCoder ABC 213 B – Booby Prize Python解説
Booby Prize
1,…,N の番号のついた N 人の選手がゲームを行いました。選手 i のスコアは Aiであり、
AtCoder Beginner Contest「Booby Prize」
スコアが小さい方が上位になります。
ブービー賞に該当する選手、すなわち、下位から 2 番目の選手の番号を求めてください。
与えられるスコアからブービー賞を答える問題です。スコアをソートしてブービー賞を決めますが、ソートをすると選手の番号がわからなくなるので、ソートの配列と元の配列は分けた方がいいです。
n = int(input())
a = list(map(int, input().split()))
b = sorted(a)
booby = b[-2]
print(a.index(booby) + 1)
先述した通り、ソート用と元の配列で分けています。スコアをソートしたら、下位から2番目(b[-2])のスコアをboobyに入れ、元の配列の何番目の選手になるかをindexで調べて完了です。
n = int(input())
a = list(map(int, input().split()))
booby = []
for i in range(n):
booby.append([a[i], i + 1])
booby = sorted(booby)
print(booby[-2][1])
こちらの解き方では、配列boobyにスコアを入れる際に、選手の番号も与えています(booby.append([a[i], i + 1]))。この配列をソートして、最後に下位から2番目の選手の番号(booby[-2][1])を出力します。