본문 바로가기
코틀린

코틀린으로 알고리즘 문제 풀기 - 입력 받기 꿀팁

by 기계공학 주인장 2023. 3. 23.
반응형

코틀린으로 알고리즘 문제 풀기 - 입력 받기

  • Sanner와 BufferedReader 비교
  • BufferedReader를 사용하여 여러 가지 입력값 받기

 

코딩으로 알고리즘 문제를 풀 때 가장 중요하고 기본적인 것은 입력 값을 받는 것입니다.

 

이번 블로그에서는 입력 값을 받는데 어떤 방법이 있고

 

어떤 방법이 제일 효과적인지 알아보겠습니다.


Scanner VS BufferedReader 

Sanner를 사용했을 경우

다음과 같은 입력 값이 있을 때

abc
123

Scanner를 사용하면 다음과 같은 코드로 출력할 수 있습니다.

fun main(args: Array<String>) = with(Scanner(System.`in`)) {

    val name = next()
    val age = nextInt()
    
	// name: abc, age: 123
    println("name: $name, age: $age")

}

 

공백으로 구분되어있는 입력 값의 경우

10 20 30 40 50

다음과 같은 코드를 사용해서 공백을 구분하여 하나씩 값을 받아올 수 있습니다.

 

fun main(args: Array<String>) = with(Scanner(System.`in`)) {
    val arr = ArrayList<Int>()
    repeat (5) {
        arr.add(nextInt())
    }
    // 10 20 30 40 50
    println("Contents Of Array: $arr")
}

 

이제 BufferedReader를 사용해서 입력 값을 받는 방법을 보겠습니다.


BufferedReader를 사용했을 경우

abc
123

다음과 같은 코드로 받을 수 있다.

 

fun main(args: Array<String>) = with(System.`in`.bufferedReader()) {
    val name = readLine()
    val age = readLine().toInt()

	// name: abc, age: 123
    println("name: $name, age: $age")
}

기본적으로 사용하는 방법은 둘 다 비슷합니다.

 

하지만, BufferedReader는 다음과 같은 효과가 때문에 주로 사용합니다.

 

BufferedReader는 속도가 빠르다.


BufferedReader 응용하기

위에서 보여줬던 내용을 포함하여 각 경우에 따른 BufferedReader를 사용 방법을 알아보겠습니다.

 

주어진 입력 값이 1 줄이고 공백으로 값이 구분되어있을 때

10 20 30
fun main(args: Array<String>) = with(System.`in`.bufferedReader()) {
    val nums = readLine().split(" ").map { it.toLong() }
	
    // [10, 20, 30]
    println(nums)
}

 

주어진 입력 값이 여러 줄이고 공백으로 값이 구분되어 있을 때 - 1

2 (주어진 라인 수)
x y (주어지는 값은 x y 2개로 고정)
x y
fun main(args: Array<String>) {
    val n = readln().toInt()
    val dots = ArrayList<Dot>()
    repeat(n) {
        val (x, y) = readln().split(" ").map { it }
        dots.add(Dot(x, y))
    }
    // [Dot(x=x, y=y), Dot(x=x, y=y)]
    println(dots)
}
data class Dot(val x: String, val y: String)

 

주어진 입력 값이 여러 줄이고 공백으로 값이 구분되어 있을 때 - 2

2 (주어진 라인 수)
a b c (주어지는 값이 유동적)
d e f
fun main(args: Array<String>) = with(System.`in`.bufferedReader()) {
    val lines = readLine().toInt()
    val data = ArrayList<String>()

    for(i in 0 until lines){
        data.add(readLine().split(" ").map { it }.toString())
    }

	// [[a, b, c], [d, e, f]]
    println(data)
}

 

반응형


"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."


댓글