🐣

初心者の為の競プロでKotlinを使う時の標準入力

1 min read

Kotlinでの標準入力

AtCoderやpaizaスキルチェックをKotlinでするときに、入力形式毎の標準入力のベストプラクティスが綺麗にまとまっているサイトが検索上位に無かったので備忘録的にまとめます。

まだまだ初心者なので、新たな入力形式にぶつかる毎に追記する予定です。

1行に

文字1つ

入力例

Hello

val s = readLine()!!

数字1つ

入力例

100

val n = readLine()!!.toInt()

readLine()は文字列として受け取るのでIntにキャスト

文字2つ

入力例

Hello World

val (s1,s2) = readLine()!!.split(" ")

区切り文字を指定して(ここでは半角空白)一度に複数の変数に入れることが出来る

数字2つ

入力例

1 2

val (n1,n2) = readLine()!!.split(" ").map{it.toInt()}

splitするときはキャストの仕方が少し変わる
入力列が3つ,4つと増えた時も左辺の変数の数を増やせばよい

複数行に

文字1つ

入力例

3
aaa
bb
c

val n = readLine()!!.toInt()
val s = (0 until n).map{readLine()!!}

readLine()をn回繰り返してリストを作成してくれる
この例ではsに[aaa,bb,c]のようなリストが入っている
↓でも同様の結果になる

val n = readLine()!!.toInt()
val s = List(n){readLine()!!}

数字の場合もキャストするだけ

文字2つ

入力例

3
aaa zzz
bb yy
c x

val n = readLine()!!.toInt()
val s = (0 until n).map{readLine()!!.split(" ")}

splitしただけ
この例ではsに[[aaa,zzz],[bb,yy],[c,x]]のようなリストが入っている
↓でも同様の結果になる

val n = readLine()!!.toInt()
val s = List(n){readLine()!!.split(" ")}

数字複数

入力例

3 4
1 11 111 1111
2 22 222 2222
3 33 333 3333

val (n,m) = readLine()!!.split(" ").map{it.toInt()}
val nm = (0 until n).map{readLine()!!.split(" ").map{it.toInt()}}

2~4行が[[1,11,111,1111],[2,22,222,2222],[3,33,333,3333]]のリストになる

初見で狼狽えたパターン

入力例

2 3
1
11
111
2
22
222

val (n, m) = readLine()!!.split(" ").map {it.toInt()}
val h = List(n) {List(m) {readLine()!!.toInt()}}

2行目以降が[[1, 11, 111], [2, 22, 222]]のリストになる

さいごに

冒頭にも書きましたが、新たな入力形式の問題や高難易度の問題で入力を工夫する必要が出てきたら随時追記していこうと思います。自分と同じように標準入力で困った人の助けになれば幸いです。

Discussion

ログインするとコメントできます