Kotlin/문법

Kotlin - 입력 값 받기 (알고리즘 문제 풀기위한)

내손은개발 🐾 2024. 2. 6. 00:21

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