fun main() = with(System.`in`.bufferedReader()) {
// 정수 하나 읽기
val num = readLine().toInt()
// 공백 기준으로 읽기
val nums = readLine().split(" ").map { it.toInt() }
// 문자열 을 char 배열로 받기
val char = readLine().toCharArray
}
<aside> 💡 Java와 마찬가지로 속도 퍼모먼스를 위해 Scanner Class를 이용하듯이 Kotlin에서는 bufferedReader를 사용한다. with 메서드로 bufferedReader의 함수를 객체 없이 사용할 수 있다.
</aside>
fun main() = with(System.`in`.bufferedReader()) {
// 기본
print("hello")
// bufferedWriter
val sout = BufferedWriter(OutputStreamWriter(System.out))
sout.appendLine()
sout.flush()
sout.close();
// 더 짧은 bufferedWriter
val bw = System.out.bufferedWriter()
//템플릿
val s = "abc"
println("$s.length is ${s.length}") // prints "abc.length is 3"
}
<aside> 💡 입력과 마찬가지로 BufferedWriter를 사용하거나 기본 출력을 이용한다.
</aside>
Python에서는 List, Dict, Set과 같은 자료구조에 간단한 패턴을 적용해 표현하는 방법이다. 마찬 가지로 Kotlin에서도 패턴의 아래의 3가지 구조 부분을 변환하여 사용할 수 있다.
# Python Comprehension Structure
a_list = [1,2,3,4,5,6]
# output | var | input | filter/predicate
even_ints_squared = [e * e for e in a_list if e % 2 == 0]
// Kotlin Comprehension Structure
var aList = listOf(1,2,3,4,5,6)
// input | filter | output
val evenIntsSquared = aList.filter { it % 2 == 0 }.map{it * it}
<aside> 💡 추가적으로 Lazy generator으로 하고자 한다면, Python에서는 대괄호 대신 (…)으로 Kotlin에서는 asSequence()를 앞에 사용하면 된다.
</aside>
아래 코드는 Dict과 List를 모두 사용하는 소수(Primary Num)예제이다.
# Python
noprimes = {j for i in range(2, 8) for j in range(i*2, 100, i)}
primes = [x for x in range(2, 100) if x not in noprimes]
// Kotlin
val noprimes = (2..7).flatMap { (it*2..99).step(it).toList() }.toSet()
val primes = (2..99).filter { it in nonprimes }
아래 코드는 전치 행렬 생성하는 방법이다.
# Python
matrix = [ [1 if item_idx == row_idx else 0 for item_idx in range(0, 3)] for row_idx in range(0, 3)]
// Kotlin
val matrix = (0..2).map { row -> (0..2).map { col -> if (col == row) 1 else 0 }}
// Or
val matrix2 = Array(3) { row ->
IntArray(3) { col -> if (col==row) 1 else 0}
}
아래 코드는 대문자의 고유 집합을 생성하는 예제이다.