AtCoderにおける標準入力の受け取り方について,過去に出題された問題を例にまとめました.
input()
を使うと,行ごとに入力を受け取ることができます.
入力
$S$
入力例
$\mathrm{abc}$
サンプルコード
S = input()
確認
print(S, type(S))
# 'abc' <class 'str'>
ただし,デフォルトでは str
で受け取るので,適宜キャスト (型変換) を行う必要があります.
入力
$X$
入力例
$140$
サンプルコード
X = int(input())
確認
print(X, type(X))
# 140 <class 'int'>
Pythonではアンパック代入が可能です.
入力
$M\ H$
入力例
$10\ 120$
サンプルコード
M, H = map(int, input().split())
確認
print(M, type(M))
# 10 <class 'int'>
print(H, type(H))
# 120 <class 'int'>
map()
を使うと,まとめてキャストを行うことができます.
また,リストの変数名の末尾を ‘s’ にしておくと,変数名だけでリストだと判別できるようになります.
入力
$N$ $A_1\ A_2\ A_3\ \ldots\ A_N$
入力例
$3$ $1\ 5\ 7$
サンプルコード
N = int(input())
As = list(map(int, input().split()))
確認
print(As, type(As))
# [1, 5, 7] <class 'list'>
print(As[0], type(As[0]))
# 1 <class 'int'>
for文とリスト内包表記を組み合わせることで,リストに格納することができます.
入力
$H\ W\ X\ Y$ $S_1$ $S_2$ $S_3$ $\vdots$ $S_H$
入力例
$4\ 4\ 2\ 2$ $##..$ $…#$ $#.#.$ $.#.#$
サンプルコード
H, W, X, Y = map(int, input().split())
Ss = [input() for _ in range(H)]
確認
print(Ss, type(Ss))
# ['##..', '...#', '#.#.', '.#.#'] <class 'list'>
print(Ss[0], type(Ss[0]))
# ##.. <class 'str'>
print(Ss[0][0], type(Ss[0][0]))
# # <class 'str'>
例) CODE FESTIVAL 2016 Grand Final(Parallel)H - AB=C Problem
2次元配列を使うとよい. また,リストの変数名の末尾を ‘ss’ にしておくと,変数名だけで2次元配列だと判別できるようになります.
入力
$N$ $c_{1,1}\ \ldots\ c_{1,N}$ $\vdots$ $c_{N,1}\ \ldots\ c_{N,N}$
入力例
$2$ $0\ 1$ $1\ 0$
サンプルコード
N = int(input())
css = [list(map(int, input().split())) for _ in range(N)]
確認
print(css, type(css))
# [[0, 1], [1, 0]] <class 'list'>
print(css[0], type(css[0]))
# [0, 1] <class 'list'>
print(css[0][0], type(css[0][0]))
# 0 <class 'int'>