🗒️

競プロ用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

注意点

  1. インデックス変換: AtCoderは1-indexedが多いため、必要に応じて-1して0-indexedに変換
  2. 計算量: 大きな2次元配列作成時は計算量に注意
  3. 型安全性: map(int, input().split())は全て整数の場合のみ有効

Discussion