All Articles

AtCoderにおける標準入力の受け取り方 (Python ver.)

はじめに

AtCoderにおける標準入力の受け取り方について,過去に出題された問題を例にまとめました.

実行環境

  • Python 3.9.2

1行に1個の値が入力されるとき

input() を使うと,行ごとに入力を受け取ることができます.

例) ABC197A - Rotate

入力

$S$

入力例

$\mathrm{abc}$

サンプルコード

S = input()

確認

print(S, type(S))
# 'abc' <class 'str'>

ただし,デフォルトでは str で受け取るので,適宜キャスト (型変換) を行う必要があります.

例) ABC192A - Star

入力

$X$

入力例

$140$

サンプルコード

X = int(input())

確認

print(X, type(X))
# 140 <class 'int'>

1行に複数の値が入力されるとき

Pythonではアンパック代入が可能です.

例) ABC195A - Health M Death

入力

$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’ にしておくと,変数名だけでリストだと判別できるようになります.

例) ABC197C - ORXOR

入力

$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'>

複数行に1個ずつ値が入力されるとき

for文とリスト内包表記を組み合わせることで,リストに格納することができます.

例) ABC197B - Visibility

入力

$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'>

Published 2021/04/1

Hello, world! I am an web backend engineer based in Japan. I am interested in tech, math and mahjong.