LoginSignup
9
5

More than 3 years have passed since last update.

Kotlinで標準入力

Last updated at Posted at 2021-03-13

Kotlinで競技プログラミングをやりたいと思ったので覚書に
文法等は別の記事に丁寧にまとめられているのでそちらを参照下さい
はじめよう、Kotlin(基本編)

指摘等コメントで頂けると幸いです

入力

一行に一つ

readLine()を利用します

val s = readLine() //String
val n = readLine()!!.toInt() // Int

readLine()は入力を文字列として返す関数なので、数値として扱う場合は別途キャストを入れてください(double等も同様)

ちなみにInteger.parseInt()でキャストする方法もあります。若干こちらが早いです
大量の数値の入力を受け取る場合はこちらを使うのもよいかもしれません

↓"0"を数値にキャストしたときの処理速度の違い(measureNanoTime関数で測定)
image.png

一行に複数

a b cのように空白区切りになっている入力です
split()を利用します

val s = readLine()!!.split(" ") // List<String>
val n = readLine()!!.split(" ").map(String::parseInt) // List<Int>

split()はPython等と違い空白文字でも引数が必要な点に留意してください
各値のキャストはmap()parseIntを渡すことで簡潔に行えます

このままでは不便なので各値を変数にばらしますが、ここでKotlinの便利な機能が利用できます

val (s1, s2, s3) = readLine()!!.split(" ") // String
val (n1, n2, n3) = readLine()!!.split(" ").map(String::parseInt) // Int

変数名を括弧で囲んで複数指定することで、配列の各値が順番に代入されます

複数行に一つ

a
b
c

のように改行区切りで入力されるパターンです
List生成時にブロックをくっつけることで値の代入が同時に行えます

val s = List(n) { readLine() } // List<String>

val num = List(n) { readLine()!!.toInt() } // List<Int>

もちろん上記で紹介した複数変数への代入も可能です

val (s1, s2, s3) = List(n) { readLine() } // String
val (n1, n2, n3) = List(n) { readLine()!!.toInt() } // Int

複数行に複数

a b c
d e f
g h i

みたいなのです
多次元配列に格納する形とします

val s = List(n) { // List<List<String>>
  readLine()!!.split(" ")
}

val num = List(n) { // List<List<Int>>
  readLine()!!.split(" ").map(String::parseInt)
}
9
5
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
5