๋ฐ์ํ
Dequeue๋ ์์ชฝ ๋์์ ์ฝ์ ๊ณผ ์ญ์ ๊ฐ ๋ชจ๋ ๊ฐ๋ฅํ ์๋ฃ๊ตฌ์กฐ๋ก, ์ด๋ฅผ ํตํด ํ์ ์คํ์ ๊ธฐ๋ฅ์ ๋ชจ๋ ์ํํ ์ ์์ต๋๋ค.
Dequeue๋ฅผ ๊ตฌ์กฐ์ฒด์ ๋ฐฐ์ด์ ์ด์ฉํด ๊ตฌํํ ์ ์์ต๋๋ค.
์ ๋ค๋ฆญ์ ํ์ฉํ์ฌ Dequeue ๊ตฌ์กฐ์ฒด๋ฅผ ์ ์ํ๊ณ , ์ฃผ์ ๊ธฐ๋ฅ๋ค์ ๊ตฌํํด๋ณด๊ฒ ์ต๋๋ค.
struct Deque<T> {
private var enqueue: [T] = [] // ๋ค์ชฝ์์ ์์๋ฅผ ์ถ๊ฐ/์ ๊ฑฐํ๋ ๋ฐฐ์ด
private var dequeue: [T] = [] // ์์ชฝ์์ ์์๋ฅผ ์ถ๊ฐ/์ ๊ฑฐํ๋ ๋ฐฐ์ด
var count: Int {
return enqueue.count + dequeue.count
}
var isEmpty: Bool {
return enqueue.isEmpty && dequeue.isEmpty
}
var first: T? {
return dequeue.isEmpty ? enqueue.first : dequeue.last
}
var last: T? {
return enqueue.isEmpty ? dequeue.first : enqueue.last
}
mutating func pushFirst(_ n: T) {
dequeue.append(n)
}
mutating func pushLast(_ n: T) {
enqueue.append(n)
}
mutating func popFirst() -> T? {
if dequeue.isEmpty {
dequeue = enqueue.reversed()
enqueue.removeAll()
}
return dequeue.popLast()
}
mutating func popLast() -> T? {
if enqueue.isEmpty {
dequeue.reverse()
let returnValue = dequeue.popLast()
dequeue.reverse()
return returnValue
} else {
return enqueue.popLast()
}
}
}
์ ์ฝ๋์์๋ Dequeue์ ๊ธฐ๋ณธ ๋์์ ๊ตฌํํ์ต๋๋ค.
- pushFirst(_:): ์์ชฝ์ ์์๋ฅผ ์ถ๊ฐํฉ๋๋ค. ์๊ฐ ๋ณต์ก๋๋ O(1)์ ๋๋ค.
- pushLast(_:): ๋ค์ชฝ์ ์์๋ฅผ ์ถ๊ฐํฉ๋๋ค. ์์๋ฅผ ๋ฐฐ์ด์ ์ฒซ ๋ฒ์งธ ์์น์ ์ฝ์ ํ๋ฏ๋ก, ์๊ฐ ๋ณต์ก๋๋ O(n)์ ๋๋ค.
- popFirst(): ์์ชฝ์์ ์์๋ฅผ ์ ๊ฑฐํ๊ณ ๋ฐํํฉ๋๋ค. ์๊ฐ ๋ณต์ก๋๋ ํ๊ท O(1), ์ต์ ์ ๊ฒฝ์ฐ O(n)์ ๋๋ค.
- popFront(): ๋ค์ชฝ์์ ์์๋ฅผ ์ ๊ฑฐํ๊ณ ๋ฐํํฉ๋๋ค. ์๊ฐ ๋ณต์ก๋๋ ํ๊ท O(1), ์ต์ ์ ๊ฒฝ์ฐ O(n)์ ๋๋ค.
์ด Dequeue ๊ตฌ์กฐ์ฒด๋ ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํ ์ ์์ต๋๋ค
var deque = Deque<Int>()
deque.pushLast(1)
deque.pushLast(2)
deque.pushFirst(0)
print(deque.popFirst() ?? -1) // ์ถ๋ ฅ: 0
print(deque.popLast() ?? -1) // ์ถ๋ ฅ: 2
print(deque.count) // ์ถ๋ ฅ: 1
print(deque.isEmpty) // ์ถ๋ ฅ: false
์ด๋ ๊ฒ Dequeue๋ฅผ ์ฌ์ฉํ๋ฉด, ํ์ ์คํ์ ๊ธฐ๋ฅ์ ๋ชจ๋ ์ํํ ์ ์๋ ์ ์ฐํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
๋ฐ์ํ
'โจ๏ธ Language > swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] ์ฐ์ ์์ ํ(Priority Queue) ๊ตฌํํ๊ธฐ (0) | 2024.09.27 |
---|---|
[Swift] ํ(Heap) ๊ตฌํํ๊ธฐ (0) | 2024.09.27 |
[Swfit] ํ(Queue) ๊ตฌํํ๊ธฐ (1) | 2024.09.27 |
[Swift] ์คํ(Stack) ๊ตฌํํ๊ธฐ (0) | 2024.09.27 |
[Swift] ์๋ ์ฐธ์กฐ ์นด์ดํธ (0) | 2024.04.02 |