ABC009-B - 心配性な富豪、ファミリーレストランに行く。 を解く
ABC009-B - 心配性な富豪、ファミリーレストランに行く。
長い問題。競プロ特有の「前半は読む意味のない文章」ってやつですね…
どうやら、与えられる数字から
2番目に大きいものを選んで出力する問題のようだ
制約が () とゆるゆるなので、計算量を贅沢に使って解くとする
まず数値をリストに入れた後、set型に変換
再度リストに戻した後ソートして2番目に大きい数を出力する
set型(集合型)は要素の順番・重複がないことが特徴の型で
この型に一度変換することで重複要素を削除することができる
この問題は {100, 200, 300, 300} のようなパターンの場合は
200を出力する必要があるので、重複要素を削除してソートすれば
2番目に大きい数がわかるというわけだ
提出したコード
# 入力 n=int(input()) l=[] for i in range(n): l.append(int(input())) # setに変換 -> listに変換 l=list(set(l)) # ソート l.sort() # 2番目に大きい数を出力 print(l[-2])
ソートをかけた後のリストは
[100, 200, 300, 500, 700, 900]
みたいな感じになっているので、後ろから2番目を指定することで
2番目に大きい数を取り出すことができる
ちなみに、負の数字を添字に使うことで、後ろから要素を取得できる
これはなかなか便利