考えて競プロする

プログラミングコンテストの問題をどう考えて解いたかを記録していくブログです。使用言語はPython3

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

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

 

長い問題。競プロ特有の「前半は読む意味のない文章」ってやつですね…

 

どうやら、与えられる数字から

2番目に大きいものを選んで出力する問題のようだ

 

制約が N () とゆるゆるなので、計算量を贅沢に使って解くとする

 

まず数値をリストに入れた後、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番目に大きい数を取り出すことができる
 
ちなみに、負の数字を添字に使うことで、後ろから要素を取得できる
これはなかなか便利
 
提出結果はACでした