AtCoder ABC 213 B – Booby Prize Python解説

スポンサーリンク

Booby Prize

1,…,N の番号のついた N 人の選手がゲームを行いました。選手 i のスコアは Aiであり、
スコアが小さい方が上位になります。
ブービー賞に該当する選手、すなわち、下位から 2 番目の選手の番号を求めてください。

AtCoder Beginner Contest「Booby Prize」

与えられるスコアからブービー賞を答える問題です。スコアをソートしてブービー賞を決めますが、ソートをすると選手の番号がわからなくなるので、ソートの配列と元の配列は分けた方がいいです。

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])を出力します。