[회고] 신입 iOS 개발자가 되기까지 feat. 카카오 자세히보기

🍎 Apple/Swift

[Swift] Queue (Deque) 구현

inu 2022. 4. 25. 13:51

최근 Swift로 알고리즘 문제를 해결하고 있습니다.

그런데 Swift에는 Queue(Deque)가 없어 종종 불편할 때가 있더라구요

그래서 한번 직접구현해봤습니다.

 

Swift로 구현한다는 것에 목적이 있는 포스팅이기 때문에 Queue와 Deque에 대한 설명은 생략하겠습니다.

 

참고 : https://velog.io/@seri_ous/Swift-%ED%81%90-Swift-Algorithm-Club-%EB%B2%88%EC%97%AD


구현

class Queue<T> {
    var array: [T?]
    var head = 0

    var isEmpty: Bool {
        return count == 0
    }

    var count: Int {
        return array.count - head
    }

    var first: T? {
        if isEmpty {
            return nil
        } else {
            return array[head]
        }
    }

    var last: T? {
        if isEmpty {
            return nil
        } else {
            return array.last!
        }
    }

    init(_ array: [T?] = [T?]()) {
        self.array = array
    }

    func append(_ element: T) {
        self.array.append(element)
    }

    func removeFirst() -> T? {
        guard head < array.count, let element = array[head] else { return nil }
        array[head] = nil
        head += 1

        return element
    }

    func removeLast() -> T? {
        return array.removeLast()
    }
}

해당 Queue의 핵심은 가장 앞쪽을 의미하는 값인 head입니다.

앞쪽을 삭제해야할 일이 생기면 array[head]를 nil로 만들고 head를 1 올려서 처리합니다.

 

Swift의 Array는 기본적으로 removeLast에 대해서는 O(1)의 시간복잡도를 가지기 때문에 이부분은 따로 처리해줄 필요가 없습니다.

Array 양쪽을 O(1)로 확인하고 삭제할 수 있는 Queue(=사실상 Deque)가 완성되었습니다.

 

알고리즘 문제중에는 Queue가 필요한 문제가 많아서

Deque로서 활용하기보단 Queue로 활용하는 경우가 더 많을 것 같네요!

 

'🍎 Apple > Swift' 카테고리의 다른 글

[Swift] ATS (App Transport Security)  (0) 2022.05.12
[Swift] 순열과 조합 구현  (2) 2022.04.25
[Swift] Method Swizzling  (0) 2022.04.10
[Swift] Localizing (NSLocalizedString)  (5) 2022.04.10
[Swift] Generic  (0) 2022.03.07