Basic Technic

Input

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>

Output

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>

Comprehension

Python에서는 List, Dict, Set과 같은 자료구조에 간단한 패턴을 적용해 표현하는 방법이다. 마찬 가지로 Kotlin에서도 패턴의 아래의 3가지 구조 부분을 변환하여 사용할 수 있다.

  1. 출력 표현
  2. 입력 List / Sequense & Variable
  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}
}

아래 코드는 대문자의 고유 집합을 생성하는 예제이다.