[kotlin] 배열을 검색하여 특정 요소를 찾는 방법은?

1. 선형 검색

선형 검색은 배열의 처음부터 끝까지 요소를 하나씩 비교하여 원하는 요소를 찾는 방법입니다. 이 방법은 배열이 정렬되어 있지 않을 때 사용할 수 있습니다.

fun linearSearch(array: IntArray, target: Int): Int {
    for (i in array.indices) {
        if (array[i] == target) {
            return i
        }
    }
    return -1 // 요소를 찾지 못한 경우 -1 반환
}

val array = intArrayOf(2, 7, 5, 9, 1)
val target = 5
val result = linearSearch(array, target)
if (result != -1) {
    println("$target은 배열에서 인덱스 $result에 있습니다.")
} else {
    println("$target을 찾을 수 없습니다.")
}

2. 이진 검색

이진 검색은 배열이 정렬되어 있는 경우에 사용할 수 있는 효율적인 검색 방법입니다. 배열을 반으로 나누어 찾고자 하는 요소가 어느 반에 속하는지를 체크하여 범위를 좁혀가는 방식입니다.

fun binarySearch(array: IntArray, target: Int): Int {
    var low = 0
    var high = array.size - 1
    
    while (low <= high) {
        val mid = (low + high) / 2
        when {
            array[mid] == target -> return mid
            array[mid] < target -> low = mid + 1
            else -> high = mid - 1
        }
    }
    
    return -1 // 요소를 찾지 못한 경우 -1 반환
}

val sortedArray = intArrayOf(1, 2, 5, 7, 9)
val target = 5
val result = binarySearch(sortedArray, target)
if (result != -1) {
    println("$target은 배열에서 인덱스 $result에 있습니다.")
} else {
    println("$target을 찾을 수 없습니다.")
}

위의 예제 코드는 Kotlin에서 배열 검색을 위한 선형 검색과 이진 검색 방법을 보여줍니다. 선택한 방법에 따라 배열에서 특정 요소를 검색할 수 있습니다. 검색 알고리즘의 시간 복잡도에 따라 성능이 달라질 수 있으므로 알고리즘을 선택할 때 이 점을 고려해야 합니다.