[회고] 신입 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