#背景
AtCoder等の競技プログラミングの問題では入力の形式が指定されます.
その際,あらゆる入力形式を指定されるため.その都度コードを考えなくてはいけません.
どうせならそんなところで時間を割きたくはないですよね?
そこで,本記事ではAtCoder Beginners Selectionにおける10題に沿って入力形式とそのコードをまとめます.
問題解説はこちらの記事を参照してください.
#標準入力
最もシンプルな入力
##str型
a = input("表示される文章")
デフォルトがstr型なので最低限のコードで済みます.
ここでは入力を変数aに代入しています.
数値を入力しても文字列として認識されますのでご注意ください.
##int型
b = int(input("表示される文章"))
input全体にintを適用します.
またAtCoderでは数値入力の際に文章を表示させる必要はないので,以下のコードで大丈夫です.
c = int(input())
#縦に複数(定数)の入力
標準入力のコードを入力して欲しい数だけ書くだけです.
もし,数値で入力を3つ受付けたい場合であれば以下のコードで書けます.
a = int(input(""))
b = int(input(""))
c = int(input(""))
入力時は一つの数値を入力するたびにEnterを押すと,上の変数(ここではa)から順に代入されていきます.
#縦に複数(可変)の入力
ユーザの入力によって,入力されるべき値の個数が変わる場合,具体的には以下の場合について説明します.
N
d1
d2
d3
:
dN
ここではユーザの最初の入力がNの場合,N個の入力行を示さなくてはなりません.
for文でN回入力欄を出力するというようなコードを書けばいいのです.
N = int(input())
d = [int(input()) for i in range(N)]
#横に複数(定数)の入力
AtCoderでは頻出してこの入力方法を指定されます.
一行で三つの値(例えば a b c)の入力を要求された際は以下のように書きます.
a,b,c = map(int, input().split("何で入力を区別するか"))
map関数に関してここでは多くを語りませんが,第一引数で指定した物を第二引数に適用していくような感覚です.(間違っていたらご指摘ください)
split()の()の中身は入力を何で区別するかを指定しています.
コロンで入力を区切りたかったら(":")と書きます.
AtCoderの練習問題ではスペースで区別することしか指定されませんので,以下のコードで大丈夫です.
a,b,c = map(int, input().split())
#横に複数(可変)の入力
先ほどと違って入力すべき値の数がユーザからの入力によって変わる以下のような場合を説明します.
A1 A2 A3 A4 ... AN
この場合は予め代入する変数を固定数個用意することはできませんので,入力された複数の値を一つのリストとして扱います.(他の方法もあると思います.)
N_list = list(map(int, input().split()))
これにより,一行に可変数個の入力に対応可能です.
#横に複数(定数)の入力を縦に複数(可変)入力
これはAtCoder Beginners Selectionの最後の問題'Traveling'にて要求されます.
タイトルを見てもなんのことかわからない方もいると思いますので,入力の指定方法を具体的に書きます.
N
t1 x1 y1
t2 x2 y2
:
tN xN yN
正直,いきなり出会ったら解くことに悪戦苦闘すると思います.
ですが,ここを読んでいる方はきっとこれまでの問題,上記であげた入力方法をマスターしていると思いますので,単にそれらを組み合わせればいいのです.
N = int(input())
points = [map(int, input().split()) for i in range(N)]
この入力方法ではpointsというリストの各要素にオブジェクト(t,x,yのセット)が入っています.
インデックスを指定してあげれば任意のオブジェクトが参照できます.
オブジェクトの中身を参照するのは少し難しいかもしれませんが,挑戦してみてください.
実際の問題については別の記事で触れます.
#最後に
これでAtCoder Beginners Selectionに登場する入力方法は全てカバーできました.
もちろん,ここに書いた方法が全てではないですし,もっと効率のいいコードも存在するでしょう.
自身も競技プログラミングを始めたばかりなので至らぬ点も多いですが,この記事が皆様のお役に立てれば嬉しく思います.
ここまで読んで下さった方々,ありがとうございました.