[iOS] Swift에서 Queue와 Deque 구현하기

someng·2022년 12월 10일
0

iOS

목록 보기
21/33

Swift 에는 Queue 가 없다..! 😱
프로그래머스 코테준비를 하면서 Array로 큐 연산을 하다보니 시간초과가 발생했다 ㅠㅠ
Swift로 Queue 와 앞뒤로 삽입/삭제가 가능한 Deque (덱)을 구현한 코드를 활용했더니 시간초과 해결! 🥰

Queue 구현

class Queue<T> {
    var enQueue: [T]
    var deQueue: [T] = []
    
    var count: Int {
        return enQueue.count + deQueue.count
    }
    
    var isEmpty: Bool {
        return enQueue.isEmpty && deQueue.isEmpty
    }
    
    init(_ queue: [T]) {
        self.enQueue = queue
    }
    
    func push(_ element: T) {
        enQueue.append(element)
    }
    
    func pop() -> T {
        if deQueue.isEmpty {
            deQueue = enQueue.reversed()
            enQueue.removeAll()
        }
        return deQueue.popLast()!
    }
    
}

📌 사용법

temp에 Array를 넣어 선언하면 된다 👍🏻

var temp = [Int]()
for i in 1...N {
    temp.append(i)
}
var myQueue: Queue = Queue<Int>(temp)

Deque 구현

class Deque<T>{
    var enQueue: [T]
    var deQueue: [T] = []
    
    var count: Int {
        return enQueue.count + deQueue.count
    }
    
    var isEmpty: Bool {
        return enQueue.isEmpty && deQueue.isEmpty
    }
    
    init(_ queue: [T]) {
        enQueue = queue
    }
    
    func pushFirst(_ element: T) {
        deQueue.append(element)
    }
    
    func pushLast(_ element: T) {
        enQueue.append(element)
    }
    
    func popFirst() -> T {
        if deQueue.isEmpty {
            deQueue = enQueue.reversed()
            enQueue.removeAll()
        }
        return deQueue.popLast()!
    }
    
    func popLast() -> T {
        if enQueue.isEmpty {
            enQueue = deQueue.reversed()
            deQueue.removeAll()
        }
        return enQueue.popLast()!
    }
    
}
profile
👩🏻‍💻 iOS Developer

0개의 댓글