📑
競技プログラミングの入出力メモ
入力
1行の整数入力
n = int(input()) # 例: 入力 "5" → n = 5
1行のスペース区切り整数をリストとして受け取る
arr = list(map(int, input().split())) # 例: 入力 "1 2 3 4 5" → arr = [1, 2, 3, 4, 5]
-
input().split()
で スペース区切りで分割 -
map(int, ...)
で 文字列を整数に変換 -
list()
で リストに変換
複数行の入力をリストとして受け取る
n = int(input()) # まず行数を受け取る
arr = [int(input()) for _ in range(n)] # 例: 入力 "3\n5\n8\n2" → arr = [5, 8, 2]
-
for _ in range(n)
を使ってn
回input()
を繰り返す
出力
普通に出力
print(42) # → 42
リストの要素をスペース区切りで出力
arr = [1, 2, 3, 4, 5]
print(*arr) # → 1 2 3 4 5
-
*
を使うとリストの アンパック ができ、print()
のデフォルトのスペース区切りで出力される
改行区切りで出力
arr = [1, 2, 3, 4, 5]
print("\n".join(map(str, arr)))
# → 1
# 2
# 3
# 4
# 5
-
map(str, arr)
で 文字列に変換 し、"\n".join()
で 改行区切りにする
高速な入出力
入力
大量の入力を扱う場合、sys.stdin.read()
を使うと 一括で入力を受け取る ことができる。
import sys
data = sys.stdin.read().split() # 全ての入力を一括で受け取り、スペース・改行で分割
-
sys.stdin.read()
は 標準入力をすべて読み込む -
.split()
で スペース・改行区切りでリストにする
出力
大量の出力がある場合、print()
より sys.stdout.write()
の方が高速。
import sys
sys.stdout.write("Hello\n") # → Hello(改行あり)
-
sys.stdout.write()
はprint()
より 遅延が少なく高速 -
\n
を明示しないと改行されないので注意
まとめ
パターン | コード | 概要 |
---|---|---|
整数1つ | n = int(input()) |
単一の整数を受け取る |
スペース区切り整数 | arr = list(map(int, input().split())) |
1行の整数をリストとして取得 |
複数行の整数 | arr = [int(input()) for _ in range(n)] |
n 行の整数をリストとして取得 |
リストをスペース区切りで出力 | print(*arr) |
1 2 3 4 5 のように出力 |
リストを改行区切りで出力 | print("\n".join(map(str, arr))) |
各要素を改行で出力 |
高速入力 | sys.stdin.read().split() |
一括で標準入力を取得 |
高速出力 | sys.stdout.write("Hello\n") |
print() より速い |
Discussion