1. Scanner
- nextInt(), nextLine() 등으로 자료형을 손쉽게 지정 가능하다.
- 띄어쓰기로 구분되어있는 Integer도 nextInt()로 손 쉽게 가공할 수 있다.
- 키보드 입력을 바로바로 전송하는 원리여서 느리다.
// 입력값 = DF
// 27
fun main(args: Array<String>) = with(Scanner(System.`in`)) {
val name = nextLine()
val age = nextInt()
println("name: $name, age:$age") // name: DF, age:27
}
fun main(args: Array<String>) = with(Scanner(System.`in`)) {
val arr = ArrayList<Int>()
repeat(5){
arr.add(nextInt())
}
println("$arr")
}
2.BufferedReader
- scanner의 느린 단점을 보안하기 위해서 사용한다.
- 이름 그대로 입력 값을 Buffer에 보관하였다가 전송하는 방식이다.
fun main(args: Array<String>) = with(System.`in`.bufferedReader()){
val name = readLine()
val age = readLine().toInt()
println("name: $name, age: $age")
}
- Scanner는 nextInt()로 입력받는 문자열을 바로바로 가공할 수 있지만,
- BufferedReader는 readLine()만 사용할 수 있다. (String 자료형만 받아올 수 있다.)
- Integer를 가공하려면 StringTokenizer를 사용해야 한다.
// 10 20 30 40 50 을 받으려면
fun main(args: Array<String>) = with(System.`in`.bufferedReader()){
val arr = ArrayList<Int>()
val st = StringTokenizer(readLine())
while(st.hasMoreTokens()){
arr.add(st.nextToken().toInt())
}
println("$arr")
}
BufferedReader 간결하게 사용하기
fun main(args: Array<String>) = with(System.`in`.bufferedReader()){
val name = readLine()
val age = readLine().toInt()
println("$name, $age")
}
->
fun main(args: Array<String>) {
val name = readln()
val age = readln().toInt()
println("$name, $age")
}
readln()을 사용하면 with 스코프 함수를 안써도 된다.
(이러면 알고리즘 풀땐 BufferedReader을 사용안할 이유가 없다.)
입력값
4
0 0
0 1
3 4
5 7
이런 입력을 받을 때는 람다식을 사용해서 간결하게 표현가능하다.
fun main(args: Array<String>) {
val n = readln().toInt()
val arr = ArrayList<Arr>()
repeat(n) {
val (x, y) = readln().split(" ").map { it.toInt() }
arr.add(Arr(x, y))
}
println(arr) //[Arr(x=0, y=0), Arr(x=0, y=1), Arr(x=3, y=4), Arr(x=5, y=7)]
}
data class Arr(val x: Int, val y: Int)
(3월부터는 백준도 병행해서 풀어야하나,,,)
'Kotlin > 문법' 카테고리의 다른 글
Kotlin - 소수 구하기 (0) | 2024.02.08 |
---|---|
Kotlin - filter, map (0) | 2024.02.07 |
Kotlin - StringBuilder() (0) | 2024.02.05 |
Kotlin - List vs Array (0) | 2024.02.05 |
Kotlin - List 추출하기 (0) | 2024.02.04 |