📑
競技プログラミングの入出力メモ
入力
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