백준 - 수 정렬하기 2 (2751)

Seoyoung Lee·2023년 1월 23일
0

알고리즘

목록 보기
17/104
post-thumbnail
let N = Int(readLine()!)!
var arr = [Int]()

for _ in 0..<N {
    arr.append(Int(readLine()!)!)
}

arr = mergeSort(arr)

arr.forEach {
    print($0)
}

func mergeSort(_ array: [Int]) -> [Int] {
    guard array.count > 1 else { return array }
    
    let middle = array.count / 2
    
    let leftArray = mergeSort(Array(array[0..<middle]))
    let rightArray = mergeSort(Array(array[middle..<array.count]))
    
    return merge(leftArray, rightArray)
}

func merge(_ leftArray: [Int], _ rightArray: [Int]) -> [Int] {
    var leftIndex = 0
    var rightIndex = 0
    
    var sortedArray = [Int]()
    
    while leftIndex < leftArray.count && rightIndex < rightArray.count {
        let leftElement = leftArray[leftIndex]
        let rightElement = rightArray[rightIndex]
        
        if leftElement < rightElement {
            sortedArray.append(leftElement)
            leftIndex += 1
        } else {
            sortedArray.append(rightElement)
            rightIndex += 1
        }
    }
    while leftIndex < leftArray.count {
        sortedArray.append(leftArray[leftIndex])
        leftIndex += 1
    }
    while rightIndex < rightArray.count {
        sortedArray.append(rightArray[rightIndex])
        rightIndex += 1
    }
    
    return sortedArray
}

병합 정렬을 사용해서 풀었다.

정렬 개념은 다 이해하고 있긴 한데 스위프트에서 구현해보는 건 쉽지가 않다..

profile
나의 내일은 파래 🐳

0개의 댓글