AtCoder ABC 009 B – 心配性な富豪、ファミリーレストランに行く。Python解説

スポンサーリンク

心配性な富豪、ファミリーレストランに行く。

私は富豪だ。それも大富豪と言っていいぐらいお金を持っている。欲しいと思ったものはまずこの有り余るお金を使って買うことができる。しかし、この底の尽きないように思えるほどのお金でさえ人の心を買うことはできない。いくらお金があろうとも、ひとたび多くの庶民の反発を買ってしまえば、これまでのように生きていくことは難しくなるだろう。
この度私は庶民の気持ちを理解するため、初めてファミリーレストランという場所を訪れた。メニューを広げ、料理の内容とその金額を確かめると、なるほど驚きの安さである。どの料理の金額も取るに足らないようなものだから、とりあえず最も金額が高いものを選ぼうかと考えた。
しかし、考えてみれば、私は何のためにファミリーレストランに来たのであったか。庶民の気持ちを理解しようというのに、金額のことを考えずに最も高いものを選ぼうなどと、まるで意味がないではないか。ファミリーレストランに来たうえ、これ見よがしに最も高い料理を注文したとなったら、私の悪評が広まってしまう可能性だってある。
とはいえ、せっかくだから高いものを選んでその味をみてみたいというのも確かである。そうだ、そういうことなら、この店で 2 番目に高い料理を注文することにしよう。そう思って料理の金額を書き出してみたが、料理の種類が多いために 2 番目に高いものを探すのはなかなか骨が折れる。自分で探すかわりに、プログラムを書いてなんとかできないだろうか?
おっと、プログラムを書き始める前にひとつ言っておくが、最も高い金額の料理が複数あるときには注意してもらいたい。というのは、たとえば 4 種類の料理があり、それぞれの金額が 100 円、200 円、300 円、300 円であったときには、2 番目に高いものというのは 200 円の料理になるということだ。

AtCoder Beginner Contest 009

非常に長い問題文なので読むだけで疲れますが、やることとしては、与えられる入力の中で2番目に大きい数字を出力する問題です。

この問題では(100,200,300,300)の場合、2番目に大きい数字は200になるように、重複した要素を排除して考えたいためset型を使います。

n = int(input())
a = set()

for _ in range(n):
    a.add(int(input()))
    
b = sorted(a)
print(b[-2]) #高い順から2番目なので

set型の配列aを宣言したら、for文で入力を受け取ります。set型の配列に要素を追加するにはaddメソッドを使います。最後にaをソートして、高い順から2番目なので配列の[-2]を出力して完了です。