# リスト内包表記
T = [int(s) for s in input().split()]
# 以下と同じ処理
T = []
for s in input().split():
T.append(int(s))
i 番目の人がチケットを購入し終わるが何秒後かを求めている仕組み
# N:チケットを買いに来る人数, A:1人がチケットを購入するのにかかる時間, T:i番目の人が列に並ぶまでの時間
seconds = 0 # 経過時間を記憶
for i in range(N):
if seconds >= T[i]:
seconds += A
else:
seconds = T[i]
seconds += A
print(seconds)
可変長標準入力の受付
入力される文字列の個数がわからない場合は、以下のようにリストで代入する。
A問題の S, T = map(int, input().split()) との違いは、input().split() の結果をアンパック(展開して代入)するかしないかである。 また、上のコードはリスト内包表記が使われている。 リスト内包表記とは、
という形で書かれ、イテラブルオブジェクトの各要素に対して式を適用して新たなイテラブルオブジェクトを作成する処理を行う。 イテラブルオブジェクトには
range(N)
なども使える。 簡単に言うと、リストの初期化とループ処理を同時に行える処理である。以下のようなコードを簡潔に記述できる。i 番目の人がチケットを購入し終わるが何秒後かを求めている仕組み
※Tは0秒時点から数えて何秒なのかを表している。 まず、
if seconds >= T[i]:
でi番目の人が並ぶ時間になっているかを確認して、seconds
にAを加える。)。seconds
= T[i]とし)、1人分のチケットの購入処理を行う(seconds
にAを加える。)。ループを一周終えると1人分のチケットの購入が行われるので、ループの最後に
printf(seconds)
で表示すればいい。 現実のお店をイメージして処理を考えるとイメージしやすかった。