kotlin 으로 이제는 알고리즘 문제를 풀어보려고 합니다. 문제를 풀기에 앞서 가장 기본적인 for loop를 작성하는 방법 부터 개선방법 까지 찾아보았습니다.
문자열 리스트를 간단하게 loop 하여 출력하는 예제 입니다.
val fruits = listOf("apple", "banana", "kiwi")
fun main() {
// 0 기반 indexing을 사용
for (index in 0 .. fruits.size - 1) {
val fruit = fruits[index]
println("$index : $fruit");
}
}
간단하게 0부터 fruits.size - 1까지 리턴되게 for loop를 돌고있습니다.
이 경우는 fruit.size - 1를 포함하여 리턴합니다
val fruits = listOf("apple", "banana", "kiwi")
fun main() {
for (index in 0 until fruits.size) {
val fruit = fruits[index]
println($index : $fruit)
}
}
until
을 사용하면 fruit.size 에는 배타적 범위를 가지게 됩니다.
0을 포함하지만 fruit.size 를 포함하지 않는 범위까지 offset를 수동으로 작성합니다
until과는 반대로 포함 연산자를 작성하게 할 수도 있습니다.
val fruits = listOf("apple", "banana", "kiwi")
fun main() {
for (index in 0 .. fruits.lastIndex) {
val fruit = fruits[index];
println($index : $fruit);
}
}
1번과 흡사해 보이나 lastIndex를 사용하여 가장 마지막 인덱스까지 반복된다는 것을 알 수 있습니다.
자체 범위를 지정하지 않는 다른 단계를 소개합니다
val fruits = listOf("apple", "banana", "kiwi")
fun main() {
for (index in fruits.indices) {
val fruit = fruits[index]
printn("$index : $fruit")
}
}
indices 함수가 인덱스를 0부터 마지막 인덱스까지 반환하게 할 수 있습니다
val fruits = listOf("apple", "banana", "kiwi")
fun main() {
for ((index, fruit) in fruits.withIndex()) {
println($index " $fruit)
}
}
key, value 에 해당하는 값을 index fruit에 각각 배정해 줄 수 있는 방법입니다
val fruits = listOf("apple", "banana", "kiwi")
fun main() {
fruits.forEachIndexed {
index, fruit ->
println("$index : $fruit)
}
}
람다를 사용해서 위와 동일한 코드를 만들 수도 있습니다. 루프와 인덱스를 사용하게 하면 됩니다.