Post

Kotlin - PS

코틀린을 이용해 알고리즘 문제 풀이할 때 유용한 팁 정리

Kotlin - PS

입출력

기본 readln() 함수보다 성능이 좋은 bufferedReader를 사용하는 것이 좋습니다.

1
var br = System.`ìn`.bufferedReader()

숫자 이중 배열 입력 받기

1
val intArr:Array<IntArray> = Array<IntArray>(n) { br.readLine().split(" ").map { it.toInt() }.toIntArray() }

자료구조

array

코틀린에서 배열은 다음과 같이 선언 가능합니다.

1
2
3
// 크기 N짜리 배열이 생성되고, 람다 표현식이 실행되어 배열을 초기화합니다.
val arr:Array<String> = Array(N) {br.readLine()}
val arr2:Array<String> = arrayOf("1234","5678")

기본 타입 배열은 다음과 같이 생성 가능합니다.

1
2
3
4
// 1, 2, 3
val intArr:IntArray = intArrayOf(1, 2, 3)
// 0, 1, 2, 3, ~~ N-1
val intArr2:IntArray = IntArray(N) {i}

map & list

코틀린에서 map과 list는 기본적으로 읽기 전용으로 생성되기에, MutableMap 그리고 MutableList로 선언해야합니다.

1
2
3
4
5
val map:MutableMap<Int, Int> = mutableMapOf<Int, Int>()
val map = mutableMapOf(1 to 2, 2 to 3)

val list:MutableList<Int> = mutableListOf()
val list = mutableListOf<Int>(1,2,3)

정렬

코틀린에서는 다양한 메소드를 사용하여 정렬할 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
var arr = arrayOf(0, 7, 4, 3, 2, 6, 5, 1)
var arr2 = arrayOf()
var list = listOf()


arr.sort() // 오름차순으로 정렬
arr.sortDescending() // 내림차순으로 정렬

arr2 = arr.sortedArray() // 오름차순으로 정렬된 새로운 배열을 반환
arr2 = arr.sortedArrayDescending() // 내림차순으로 정렬된 새로운 배열을 반환

list = arr.sorted() // 오름차순으로 정렬된 리스트를 반환
list = arr.sortedDescending() // 내림차순으로 정렬된 리스트를 반환

----
// 데이터 클래스 정렬
data class Person(var name : String, var age : Int)

var arr = arrayOf(Person("Park", 10), Person("Kim", 12), Person("Choi", 5), Person("Lee", 19))

arr.sortBy {it.name.length} // 이름 길이를 기준으로 오름차순 정렬

arr.sortByDescending {it.age} // 나이 기준으로 내림차순 정렬

arr.sortWith(
  kotlin.Comparator {o1, o2 -> 
    o1.age - o2.age  
  }
) // sortWith() 안에 comparator를 선언해서 정렬할 수 있습니다, 나이를 기준으로 오름차순 정렬

arr.sortWith(compareBy({it.name}, {it.age})) // compareBy를 comparator 대신 삽입 가능합니다, 이름 기준 오름 차순 -> 나이 기준 오름 차

etc

character -> int

1
2
3
val str = "1234"
str[0].toInt() // 1의 아스키 코드값을 리턴
Character.getNumericValue(str[0]) // 1이라는 수를 리턴

substring

자바와 같이 [0:2]로 자를 수 없고 다음과 같은 메소드를 사용해야합니다.

1
2
3
4
str.substring(0 until 5)
str.substring(5)
str.substring(5,9)

This post is licensed under CC BY 4.0 by the author.