[swift] 정렬 함수를 사용하여 가장 가까운 원소 찾기

배열이 주어졌을 때, 주어진 숫자와 가장 가까운 원소를 찾는 방법에 대해 알아보겠습니다. 이를 위해 Swift의 정렬 함수를 활용할 것입니다.

문제 설명

주어진 배열 arr과 숫자 target이 있을 때, arr에서 target에 가장 가까운 값을 찾아서 반환해야 합니다. 가장 가까운 원소가 여러 개라면 가장 작은 값을 반환합니다.

해결 방법

가장 간단하게는 모든 원소를 하나씩 비교하면서 target과의 차이를 계산하여 가장 작은 차이를 갖는 원소를 찾을 수 있습니다. 그러나 이 경우 시간 복잡도가 O(n)이므로 배열이 매우 큰 경우 비효율적일 수 있습니다.

Swift의 정렬 함수를 사용하여 이 문제를 해결할 수 있습니다. 먼저, arr을 정렬한 뒤, 배열을 처음부터 끝까지 순회하면서 target과의 차이값을 계산합니다. 이때, 차이값이 현재까지의 최솟값보다 작으면 최솟값을 갱신하고 해당 원소를 기록합니다.

예시 코드

func findClosestElement(arr: [Int], target: Int) -> Int? {
    let sortedArr = arr.sorted()
    var closestElement: Int?
    var minDiff = Int.max
    
    for num in sortedArr {
        let diff = abs(target - num)
        if diff < minDiff {
            minDiff = diff
            closestElement = num
        }
    }
    
    return closestElement
}

let arr = [5, 9, 3, 1, 7]
let target = 4

if let closest = findClosestElement(arr: arr, target: target) {
    print("가장 가까운 원소 :", closest)
} else {
    print("배열이 비어 있습니다.")
}

위의 코드는 배열 [5, 9, 3, 1, 7]에서 숫자 4와 가장 가까운 원소를 찾는 예제입니다. findClosestElement 함수는 주어진 배열을 정렬한 뒤, 순회하면서 4와의 차이값을 계산하여 최솟값을 업데이트합니다. 이후, 최솟값을 가지는 원소를 반환합니다.

결과

실행 결과는 다음과 같습니다:

가장 가까운 원소 : 3

주어진 배열 [5, 9, 3, 1, 7]에서 숫자 4와 가장 가까운 원소는 3입니다.

참고 자료