class Solution {
fun solution(arr: IntArray, queries: Array<IntArray>): IntArray {
val answer = IntArray(queries.size)
queries.forEachIndexed{ idx, _ ->
val (s, e, k) = queries[idx]
val filtered = arr.slice(s..e).filter { it > k }
answer[idx] = filtered.minOrNull() ?: -1
}
return answer
}
}
class Solution {
fun solution(arr: IntArray, queries: Array<IntArray>): IntArray {
return queries.map { (s,e,k) ->
arr.slice(s..e).filter { it > k }.minOrNull() ?: -1
}.toIntArray()
}
}
slice
val list = listOf(10, 20, 30, 40, 50)
val result = list.slice(1..3) // 인덱스 1~3의 요소 [20, 30, 40]
println(result)
minOrNull()
- minOrNull()은 컬렉션의 최소값을 반환합니다.
- 컬렉션이 비어 있으면 null을 반환합니다.
- ?: 연산자를 사용해 null일 경우 대체 값을 지정할 수 있습니다.
val list = listOf(5, 3, 8)
val min = list.minOrNull() ?: -1 // 3
엘비스 연산자
val result = value ?: defaultValue
filter
val list = listOf(1, 2, 3, 4, 5)
val filtered = list.filter { it > 3 } // [4, 5]
구조 분해 선언
- 구조 분해 선언은 객체의 요소를 한 번에 여러 변수에 할당하는 Kotlin 문법입니다.
val (a, b) = listOf(10, 20) // a=10, b=20
val (x, y, z) = intArrayOf(1, 2, 3) // x=1, y=2, z=3
slice라는 함수를 모르고 있었는데 알고 있었더라면 문제 풀이하는 데 많은 시간이 소요되지 않았을 것이다. 내 문제풀이에도 slice가 들어가있는데 엄청난 삽질과 구글링을 통해서 찾아낸 함수이다. 코딩 테스트를 하며 좋은 점은 평소 쓸 일 없는 함수까지 알게 된다는 것이다.