【Python】Paiza標準入力の基本パターン6選!コピペで使えるテンプレート集

paiza

Paiza(パイザ)のスキルチェックや競技プログラミングにPythonで挑戦するとき、最初につまずきがちなのが「標準入力(ひょうじゅんにゅうりょく)の受け取り方」です。

「1行のときはできたのに、複数行になったらエラーが出る…」 「大量のデータを読み込んだらタイムアウト(TLE)になってしまった」

そんな悩みを持っていませんか?

この記事では、Paizaの問題を解くために必須となるPythonの標準入力パターンを、コピペで使えるコード付きで徹底解説します。初心者向けに最も効率が良く、実行速度も速い書き方を厳選しました。

これを読めば、入力部分で迷うことはもうなくなります!

なぜ重要?PaizaでPythonの標準入力をマスターすべき理由

Paizaのスキルチェックでは、問題ごとに異なる形式でデータ(文字列や数値)が流れてきます。どれだけロジックが正しくても、入力データを正しく変数に格納できなければ、1点も取ることができません。

また、Pythonの標準的な機能である input() は、データ量が数万行に及ぶと処理が遅くなり、「タイムアウト(時間切れ)」で不合格になる罠があります。

そのため、最初から「エラーが出にくく、処理が高速な書き方」をテンプレ化して覚えておくのが、ランクアップへの一番の近道です。

【準備】Paizaでタイムアウトを防ぐ「高速化コード」

まずは、コードの最上部に必ず記述しておきたい「おまじない」を紹介します。

Python

import sys
input = sys.stdin.read

sys.stdin.read を使うメリット

通常の input() が1行ずつデータを読み込むのに対し、sys.stdin.readすべての入力データを一度に丸ごと読み込みます。 これにより、データ量が非常に多いDランク後半〜Aランクの問題でも、劇的に実行速度が速くなり、タイムアウトを防ぐことができます。

📌 注意点: この設定をすると、入力データ全体が1つの大きな文字列になります。そのため、ここから紹介する .split() などのメソッドを使ってデータを分解していくのが基本スタイルになります。

【コピペOK】Paizaでよく出る標準入力パターン6選

ここからは、Paizaで頻出する入力形式ごとのテンプレートコードです。問題の「入力される値」の形式に合わせてコピペして使ってください。

① 1つの整数、または1つの文字列

【入力される値の例】

Plaintext

5

【テンプレートコード】

Python

import sys
# すべて読み込んで整数(int)に変換
n = int(sys.stdin.read())

※文字列としてそのまま受け取りたい場合は、s = sys.stdin.read().strip() と書きます(末尾の改行を消すため)。

② 1行にスペース区切りで並ぶ複数のデータ

【入力される値の例】

Plaintext

10 20 30

【テンプレートコード】

Python

import sys
# ① 文字列のリストとして別々に取得する場合
# 結果:['10', '20', '30']
labels = sys.stdin.read().split()

# ② 決まった数の整数に、それぞれ変数として代入する場合
a, b, c = map(int, sys.stdin.read().split())

③ 1行にスペース区切りで並ぶ大量の数値(リスト化)

【入力される値の例】

Plaintext

1 5 8 12 25 34 ...(大量の数字)

【テンプレートコード】

Python

import sys
# まるごと整数のリスト(配列)に変換する
numbers = list(map(int, sys.stdin.read().split()))

④ 最初に「データ数 N」が与えられ、続く N 行のデータを処理する

PaizaのCランク・Bランクで最もよく見かける、縦にデータが並ぶパターンです。 【入力される値の例】

Plaintext

3
apple
banana
orange

【テンプレートコード】

Python

import sys
# 一気に分割してリストにする
data = sys.stdin.read().split()

n = int(data[0])       # 最初の要素が「行数N」 (3)
words = data[1:]       # 2番目以降がデータ本体 (['apple', 'banana', 'orange'])

これだけで、ループを回さず一瞬でデータが取得できます。

⑤ 縦横の2次元グリッド(迷路やマップ、行列データ)

H(行数)とW(列数)が与えられ、その後にグリッド状のデータが続くパターンです。 【入力される値の例】

Plaintext

3 3
1 2 3
4 5 6
7 8 9

【テンプレートコード】

Python

import sys
# 行単位で区切るために splitlines() を使用
lines = sys.stdin.read().splitlines()

# 1行目から H(行数)と W(列数)を取得
h, w = map(int, lines[0].split())

# 2行目以降を2次元配列(リストのリスト)にする
grid = []
for i in range(1, h + 1):
    grid.append(list(map(int, lines[i].split())))

# gridの中身: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

⑥ データの行数が事前にわからない(入力の終わりまで読み込む)

問題文に「行数が指定されず、入力が続く限り読み込む」と書かれている場合です。 【入力される値の例】

Plaintext

データ1
データ2
データ3...(どこまで続くか不明)

【テンプレートコード】

Python

import sys
# split() は改行もスペースも全て区切るため、これだけで全てのデータをリスト化できます
all_data = sys.stdin.read().split()

Paizaの標準入力で迷わないためのワンポイント解説

Pythonで標準入力を扱う上で、知っておくと一気にコードが書きやすくなるメソッドの仕様を解説します。

  • .split() は超万能 引数なしで .split() を使うと、スペースだけでなく改行(\n)やタブもすべて自動で区切って1次元のリストにしてくれます。行の区切りを意識しなくていい問題なら、これが一番シンプルです。
  • 行を意識したいなら .splitlines() 「○行目の×番目」というように、データの「行」という構造を崩したくない場合は、.splitlines() を使うことで、行ごとの文字列リストを作成できます。

まとめ:標準入力をマスターしてPaizaのランクを上げよう!

Paizaのスキルチェックにおいて、標準入力は「解法を考える前段階の準備」に過ぎません。ここで時間を取られたり、エラーで悩んだりするのは非常にもったいないです。

今回紹介したテンプレートを単語帳やメモ帳に保存しておき、問題に合わせて使い分けられるように練習してみてください。

入力データの扱いがスムーズになれば、アルゴリズムの思考に集中できるようになり、Cランク、Bランク、そしてAランクへの昇格がグッと近づきますよ!

コメント

タイトルとURLをコピーしました