반응형
코틀린으로 알고리즘 문제 풀기 - 입력 받기
- 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)
}
반응형
'코틀린' 카테고리의 다른 글
코틀린에서 자주 사용하는 어노테이션(Annotation)@ 정리-3 (0) | 2023.04.13 |
---|---|
코틀린에서 abstract 클래스는 무엇이고 어떻게 사용할까? (0) | 2023.03.30 |
코틀린에서 자주 사용하는 어노테이션(Annotation)@ 정리-2 (0) | 2023.03.11 |
안드로이트 코틀린 Reflection(리플렉션) 기초 정의 (0) | 2023.03.09 |
코틀린에서 자주 사용하는 어노테이션(Annotation)@ 정리-1 (0) | 2023.03.06 |
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
댓글