📑

競技プログラミングの入出力メモ

2025/02/15に公開

入力

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) を使って ninput() を繰り返す

出力

普通に出力

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