schedule2018-07-05

競技プログラミングでの標準入力の受け取り方 | Python3

Pythonを勉強するため、競技プログラミングを始めました。 まだまだ覚えきれていないことも多く、構文を調べる時間を費やしてしまいます。

そこで、よく使用する標準入力をテンプレートとしてまとめました。

Python3.xで動作します。


2019-04-05追記:当時の記事の内容を残しつつ、読みやすく修正しました。

1行に1入力のとき

# 文字列
"""入力
abc
"""
S = input().strip()

input()が1行分の標準入力を受け取ります。 strip()は文字列の前後の空白を取り除きます。(トリム)

# 整数
"""入力
123
"""
N = int(input().strip())

# 浮動小数点数
"""入力
1.23
"""
L = float(input().strip())

input()は文字列になるので、数値に変換する必要があります。 int()float()は文字列からそれぞれ整数と浮動小数点数に変換します。

1行に空白区切りで複数の入力があるとき

2変数を受け取る

入力

Hello World
# 2つの文字列
S1, S2 = input().strip().split()

S1 # Hello
S2 # World

split()は文字列を半角スペース' 'で分割してリストを返します。 引数を変えてカンマ','やスラッシュ'/'も分割できます。

また、pythonではリストの値を各変数に入力できます。 S1にはHello、S2にはWorldが入ります。

2つの整数

入力

123 456
# 2つの整数
N, M = input().strip().split()
N, M = [int(N), int(M)]

一度文字列として受け取り、整数への変換してリスト化し代入しています。

一行で表す場合は配列で受け取る方法もあります。

複数の入力を配列で受け取る

# 複数の文字列
"""入力
Hello World python
"""
array = input().strip().split()

# 複数の整数を配列として扱う
"""入力
1 2 3 4 5
"""
array = list(map(int, input().strip().split()))

# 複数の整数を変数に代入
"""入力
3 34 34
"""
x, y, z = list(map(int, input().strip().split()))

map()適用関数対象リストを引数に取ります。 対象リストの要素一つ一つに適用関数で処理します。

適用関数をintとすると、リストの要素を整数に変換します。

複数行を配列にまとめる

競技プログラミングでは指定の行数の入力を配列にする必要もあります。

N
s1 t1 u1
s2 t2 u2
s3 t3 u3
...
sn tn un

上記のように行数NとN行の入力がある場合。

# 行数
N = int(input().strip())

# 2次元配列
grid = []
for i in range(N):
    array = list(map(int, input().strip().split()))
    grid.append(array)

for文でN行分入力を受け取り、配列gridに逐次追加しています。