🗒️
競プロ用Python入力早見表
競技プログラミング(主にAtCoder)でよく出現する入力パターンと、Pythonでの受け取り方法をまとめました。
各例には具体的な入力データとその処理結果を併記しています。
このページは自分用に内容を更新することがあります。
1. 単一の値を受け取る
1.1 整数
N = int(input())
print(N)
入力:
5
出力:
5
1.2 文字列
S = input()
print(S)
入力:
hello
出力:
hello
1.3 浮動小数点数
X = float(input())
print(X)
入力:
3.14
出力:
3.14
2. 同一行の複数の値を受け取る
2.1 2つの整数
A, B = map(int, input().split())
print("A=", A, "B=", B)
入力:
10 20
出力:
A= 10 B= 20
2.2 3つの整数
A, B, C = map(int, input().split())
print("A=", A, "B=", B, "C=", C)
入力:
1 2 3
出力:
A= 1 B= 2 C= 3
2.3 任意の個数の整数をリストで受け取る
numbers = list(map(int, input().split()))
print(numbers)
入力:
1 3 5 7 9
出力:
[1, 3, 5, 7, 9]
2.4 文字列を分割
words = input().split()
print(words)
入力:
apple banana cherry
出力:
['apple', 'banana', 'cherry']
3. 1次元配列を受け取る
3.1 N個の整数(各行に1つずつ)
標準的な方法:
N = int(input())
A = []
for _ in range(N):
A.append(int(input()))
print("A=", A)
リスト内包表記:
N = int(input())
A = [int(input()) for _ in range(N)]
入力:
4
10
20
30
40
出力:
A= [10, 20, 30, 40]
3.2 同一行のN個の整数
N = int(input())
A = list(map(int, input().split()))
print("A=", A)
入力:
5
2 4 6 8 10
出力:
A= [2, 4, 6, 8, 10]
4. 2次元配列・グリッドを受け取る
4.1 H行W列の2次元配列(整数)
標準的な方法:
H, W = map(int, input().split())
grid = []
for _ in range(H):
row = list(map(int, input().split()))
grid.append(row)
print("grid=", grid)
リスト内包表記:
H, W = map(int, input().split())
grid = [list(map(int, input().split())) for _ in range(H)]
入力:
3 4
1 2 3 4
5 6 7 8
9 10 11 12
出力:
grid= [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
4.2 文字列のグリッド
標準的な方法:
H, W = map(int, input().split())
grid = []
for _ in range(H):
grid.append(list(input()))
for i, row in enumerate(grid):
print("row" + str(i) + ":", row)
リスト内包表記:
H, W = map(int, input().split())
grid = [list(input()) for _ in range(H)]
入力:
3 3
#.#
.#.
#.#
出力:
row0: ['#', '.', '#']
row1: ['.', '#', '.']
row2: ['#', '.', '#']
5. グラフの辺情報を受け取る
5.1 隣接リスト形式
N, M = map(int, input().split())
graph = [[] for _ in range(N)]
for _ in range(M):
u, v = map(int, input().split())
u -= 1 # 0-indexedに変換
v -= 1
graph[u].append(v)
graph[v].append(u) # 無向グラフの場合
for i, neighbors in enumerate(graph):
print("頂点" + str(i) + ":", neighbors)
入力:
4 3
1 2
2 3
3 4
出力:
頂点0: [1]
頂点1: [0, 2]
頂点2: [1, 3]
頂点3: [2]
5.2 隣接行列形式
N, M = map(int, input().split())
graph = [[False] * N for _ in range(N)]
for _ in range(M):
u, v = map(int, input().split())
u -= 1
v -= 1
graph[u][v] = True
graph[v][u] = True # 無向グラフの場合
for i, row in enumerate(graph):
print("頂点" + str(i) + ":", row)
入力:
3 2
1 2
2 3
出力:
頂点0: [False, True, False]
頂点1: [True, False, True]
頂点2: [False, True, False]
6. クエリ形式の入力
6.1 複数タイプのクエリ
Q = int(input())
for i in range(Q):
query = list(map(int, input().split()))
if query[0] == 1:
x = query[1]
print("クエリ" + str(i+1) + ": タイプ1, x=" + str(x))
elif query[0] == 2:
x, y = query[1], query[2]
print("クエリ" + str(i+1) + ": タイプ2, x=" + str(x) + ", y=" + str(y))
入力:
3
1 5
2 3 7
1 10
出力:
クエリ1: タイプ1, x=5
クエリ2: タイプ2, x=3, y=7
クエリ3: タイプ1, x=10
7. 座標・ペアの情報
7.1 N個の座標
標準的な方法:
N = int(input())
points = []
for _ in range(N):
x, y = map(int, input().split())
points.append((x, y))
for i, point in enumerate(points):
print("点" + str(i+1) + ":", point)
リスト内包表記:
N = int(input())
points = [tuple(map(int, input().split())) for _ in range(N)]
入力:
3
1 2
3 4
5 6
出力:
点1: (1, 2)
点2: (3, 4)
点3: (5, 6)
8. 異なる型の混在
8.1 文字列と整数の組み合わせ
N = int(input())
data = []
for _ in range(N):
line = input().split()
name = line[0]
score = int(line[1])
data.append((name, score))
for name, score in data:
print(name + ":", str(score) + "点")
入力:
3
Alice 85
Bob 92
Charlie 78
出力:
Alice: 85点
Bob: 92点
Charlie: 78点
9. 条件付き入力
9.1 入力形式の分岐
format_type = int(input())
if format_type == 1:
A, B = map(int, input().split())
print("形式1: A=" + str(A) + ", B=" + str(B))
else:
A, B, C = map(int, input().split())
print("形式2: A=" + str(A) + ", B=" + str(B) + ", C=" + str(C))
入力例1:
1
10 20
出力例1:
形式1: A=10, B=20
入力例2:
2
1 2 3
出力例2:
形式2: A=1, B=2, C=3
注意点
-
インデックス変換: AtCoderは1-indexedが多いため、必要に応じて
-1
して0-indexedに変換 - 計算量: 大きな2次元配列作成時は計算量に注意
-
型安全性:
map(int, input().split())
は全て整数の場合のみ有効
Discussion