ํฐ์คํ ๋ฆฌ ๋ทฐ
ํ๋ ์ด์ ์ ์ดํด๋ณธ ์คํ๊ณผ ์ ์ฌํ ์๋ฃ๊ตฌ์กฐ๋ก, FIFO ์์น์ ๋ฐ๋ฆ ๋๋ค.
์คํ์ ๊ฐ์ฅ ๋์ค์ ์ถ๊ฐ๋ ๋ฐ์ดํฐ๊ฐ ๋จผ์  ์ถ์ถ๋์ง๋ง, ํ๋ ๊ฐ์ฅ ๋จผ์  ์ถ๊ฐ๋ ๋ฐ์ดํฐ๊ฐ ๋จผ์  ์ถ์ถ๋ฉ๋๋ค.
(์คํ์ ๋ํด ์์ง ์ ๋ชจ๋ฅด์ ๋ค๋ฉด ๊ณต๋ถํ ํ ๋ค์ ์ค์๊ธฐ๋ฅผ ๊ถ์ฅํฉ๋๋ค. ์ด์ ์ ์ค๋ช ํ ๋ด์ฉ์ ๊ฐ๋ตํ๊ฒ ๋์ด๊ฐ๋๋ค! ๐)
[Swift] ์คํ(Stack)์ ํ๋ง๊ธ์ค.
FIFO๋ First In First Out ์์น์ผ๋ก,
๋ฐ์ดํฐ๋ฅผ ๋ฐฐ์ด์ ๋ค์ด์จ ์์๋๋ก ์ถ๊ฐํ๊ณ (Enqueue), ๊ฐ์ฅ ๋จผ์  ์ถ๊ฐ๋ ๋ฐ์ดํฐ๋ฅผ ๋จผ์  ์ถ์ถํ๋ ๊ฒ(Dequeue)์ ์๋ฏธํฉ๋๋ค.
๋ฌด์จ ๋ง์ด์ง ์ ๋ชจ๋ฅด๊ฒ ๋ค๋ฉด…
์ด ๊ธ์ ์ ๋ชฉ์ฒ๋ผ ํ๋ ์ ์ฐฉ์.์์๊ฐํ๋ฉด ์ฝ์ต๋๋ค!
์๋ฅผ ๋ค์ด, ๋ญ๊ฐ๋ฅผ ์ ์ฐฉ์์ผ๋ก ๊ตฌ๋งคํ ๋ ์๋ฒฝ์ ์ผ์ฐ ๋๊ฐ์ ์ค์ ์๋ ๊ฒ๊ณผ ๋น์ทํ ์๋ฆฌ์ ๋๋ค.
์๋? ๋จผ์  ๊ฐ์ผ์ง ๋จผ์  ๋ค์ด๊ฐ ์ ์์ผ๋๊น์!!
์ด๋ฌํ ๊ฐ๋ ์ ๋ฐํ์ผ๋ก ํ๋ FIFO ์์น์ ๋ฐ๋ฅด๋ ์๋ฃ๊ตฌ์กฐ๋ก ์ดํดํ๋ฉด ๋ฉ๋๋ค.

์ ๋ฆฌํ์๋ฉด!
ํ๋ enqueue ์ฐ์ฐ์ผ๋ก ๊ฐ์ ์ฐจ๋ก๋๋ก ์ฝ์ ํ๊ณ , dequeue ์ฐ์ฐ์ผ๋ก ๊ฐ์ฅ ๋จผ์  ์ ์ฅ๋ ๊ฐ์ ์ญ์ ํ๋ ๊ธฐ๋ณธ์ ์ธ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์๋ฏธํฉ๋๋ค.

Swift๋ก Queue ๊ตฌํ
๊ธฐ๋ณธ์ ์ผ๋ก enqueue์ dequeue ์ฐ์ฐ์ ๊ตฌํํด์ผ ํ๋ฉฐ, ์ถ๊ฐ์ ์ผ๋ก front, isEmpty, count ์ฐ์ฐ์ ๊ตฌํํ๊ฒ ์ต๋๋ค.
์ค๋์ ์ฝ๋๋ฅผ ๋จผ์  ๋ณด๊ฒ ์ต๋๋ค.
(ํด๋น ์ฝ๋๋ ๋นํจ์จ์ ์ด๋ผ๋ ๊ฒ์ ๋จผ์  ๋ง์๋๋ฆฌ๋ฉฐ..)
struct Queue<T> {
    private var datas: [T] = []
    
    var count: Int {
        return datas.count
    }
    
    var isEmpty: Bool {
        return datas.isEmpty
    }
    
    
    mutating func enqueue(_ element: T) {
            datas.append(element)
        }
    
    mutating func dequeue() -> T? {
        return isEmpty ? nil : datas.removeFirst()
        }
    
}
๋ฐฐ์ด ์์ฑ, count, isEmpty, enqueue ๋ฉ์๋๋ ์ด์ ์ ์๊ฐ๋ ์คํ์์ ์ฌ์ฉํ ๋ด์ฉ๊ณผ ์๋นํ ์ ์ฌํฉ๋๋ค.
๋ํ, ์๊ฐ ๋ณต์ก๋ ๋ํ O(1)๋ก ์์ ์๊ฐ์ ๋์ํฉ๋๋ค.
๊ทธ๋ฌ๋, dequeue ๋ฉ์๋์์๋ ์๋ก์ด removeFirst() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
์ด ๋ฉ์๋๋ ๋ฐฐ์ด์ ๋งจ ์ฒ์ ์์๋ฅผ ์ญ์ ํ๊ณ ํด๋น ์์๋ฅผ ๋ฐํํฉ๋๋ค.
(๋ฆฌํด ํ์ ๋ Self.Element์ฌ์, ๋น ๋ฐฐ์ด์ผ ๊ฒฝ์ฐ๋ฅผ ๊ณ ๋ คํด์ค์ผ ํฉ๋๋ค!)
๊ทธ๋ฌ๋ ์ฃผ์ํ ์ ์ ์ด ๋ฉ์๋๋ ๋ฐฐ์ด์ ๋ฉ๋ชจ๋ฆฌ ์ ๋ถ๋ถ์ ๋น์๋ฒ๋ฆฌ๊ณ , ๋ค์ ์๋ ๋ฐ์ดํฐ๋ค์ ์์ผ๋ก ์ด๋ํด์ผ ํ๋ค๋ ์ ์ ๋๋ค.
๋ฐ๋ผ์, ํด๋น ๋ฉ์๋๋ O(n)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ๊ธฐ ๋๋ฌธ์ ํจ์จ์ ์ด์ง ์์ ์ ์์ต๋๋ค.
(์ด๋ฐ ๊ณผ์ ์ ์ค๋ฒํค๋๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.)
removeFirst() | Apple Developer Documentation
์์์ ๊ตฌํํ ํ๋ณด๋ค ๋ ํจ์จ์ ์ธ ์ฝ๋๋ฅผ ์์ฑํด๋ณด๊ฒ ์ต๋๋ค.
์ด๋ dequeue์ ๋ฐฐ์ด์ ๋๋จธ์ง ์์์ด ์ด๋ํ๋ ๊ฒ์ ์ต์ํํ๋ฉด ๋ฉ๋๋ค.
๋ฐ๋ผ์ ์ฒซ ๋ฒ์งธ ์์๋ฅผ ์ญ์ ํ๋ ๋ฐฉ์์ด ์๋, Head๋ฅผ ๋์ ํ์ฌ ์ฒซ ๋ฒ์งธ ์์์ ์ธ๋ฑ์ค๋ฅผ ๊ด๋ฆฌํด์ฃผ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํ์ ํด๋ณด๊ฒ ์ต๋๋ค.
๋ฌผ๋ก , ๋ฐฐ์ด์ ๊ทธ๋๋ก ์ ์ง๋ฅผ ์ํค๊ฒ ์ต๋๋ค.
๊ทธ๋ผ ์ด์  ์กฐ๊ธ ๋ ํจ์จ์ ์ธ ํ๋ฅผ ํ์ธํด๋ณด๊ฒ ์ต๋๋ค.
๋ฐฐ์ด๊ณผ head ์์ฑ
// ํ์ ์์๋ค์ ๋ด์ ๋ฐฐ์ด, head ์ธ๋ฑ์ค๋ฅผ ์ ์ง
private var datas: [T?] = []
private var head: Int = 0
์ ๋ค๋ฆญ์ผ๋ก ๊ตฌํ๋ ๋น ๋ฐฐ์ด์ ์์ฑํฉ๋๋ค. ํ์ง๋ง ์ด๋ฒ์๋ ์ต์ ๋ ํ์ ์ผ๋ก ์์ฑํฉ๋๋ค.
dequeueํ ์์๋ค์ ์ค์ ๋ก ์ญ์ ์ํค๋ ๊ฒ์ด ์๋, nil๊ฐ์ผ๋ก ๊ต์ฒดํ์ฌ ๊ด๋ฆฌ๋ฅผ ํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค.
๋ํ, head ํ๋กํผํฐ๋ฅผ ์์ฑํ์ฌ ์ฒซ ๋ฒ์งธ ์์์ ์ธ๋ฑ์ค๋ฅผ ๊ณ์ํด์ ๊ด๋ฆฌํด์ค๋๋ค.
์ฝ์ (enqueue) - O(1)
// ํ์ ์์๋ฅผ ์ถ๊ฐํ๋ ๋ฉ์๋
mutating func enqueue(_ element: T) {
    datas.append(element)
}
๋ฐฐ์ด์ ์ฝ์ (enqueue) ๋ฉ์๋๋ ์คํ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก append(_ newElement: Element) ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํฉ๋๋ค.
์ด๋ ๋ฐฐ์ด์ ๋์ ๋ฐ์ดํฐ๋ฅผ ๋ง๋ถ์ด๋ ๊ฒ์ผ๋ก, ๋๋ถ๋ถ์ ๊ฒฝ์ฐ์๋ O(1)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ต๋๋ค.
(๋ฐฐ์ด์ ์ฉ๋(capacity)๊ฐ ๋ถ์กฑํ ๋๋ O(n)์ ์๊ฐ ๋ณต์ก๋๊ฐ ๋ฐ์ํ ์ ์๋๋ฐ, ์ด๊ฒ์ ์คํ ๊ธ์์ ์ค๋ช ํ์ต๋๋ค!)
๊ฐ๋จํ๊ฒ ์ค๋ช ํ๋ฉด, ํ์ฌ ๋ฐฐ์ด์ ์ฉ๋์ด ๋ถ์กฑํ๋๊น ์๋ก์ด ๋ฐฐ์ด๋ก ์ด์ฌ๋ฅผ ๊ฐ์ผํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
append(_:) | Apple Developer Documentation
์ญ์  (dequeue) - O(1)
// ํ์์ ์์๋ฅผ ์ ๊ฑฐํ๊ณ  ๋ฐํํ๋ ๋ฉ์๋
mutating func dequeue() -> T? {
    // ํ๊ฐ ๋น์ด์๊ฑฐ๋ head๊ฐ ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ฉด nil ๋ฐํ
    guard head < datas.count, let element = datas[head] else { return nil }
    
    datas[head] = nil // head์ ํด๋นํ๋ ์์๋ฅผ nil๋ก ์ค์ 
    head += 1 // head๋ฅผ ์ฆ๊ฐ์์ผ ๋ค์ ์์๋ก ์ด๋
    
    let percentage = Double(head) / Double(datas.count)
    
    // head๊ฐ ๋ฐฐ์ด์ ์๋ถ๋ถ์ ์์๊ฐ ๋ง์ด ๋จ์์์ผ๋ฉด ๋ฐฐ์ด์ ์ ๋ฆฌ
    if percentage > 0.25 && head > 50 {
        datas.removeFirst(head) // head ๊ฐ์๋งํผ ์์๋ฅผ ๋ฐฐ์ด์์ ์ ๊ฑฐ
        head = 0
    }
    
    return element
}
dequeue ๋ฉ์๋๋ ์ญ์ ํ ๋ฐ์ดํฐ๊ฐ ์๋๋ฐ ์ญ์ ๋ฅผ ์๋ํ๋ฉด ๋์์ ๋ง์์ผ ํฉ๋๋ค.
๋ฐ๋ผ์, ํ๊ฐ ๋น์ด์๊ฑฐ๋ head๊ฐ ๋ฐ์ดํฐ ๋ฐฐ์ด์ ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ฉด nil์ ๋ฐํํฉ๋๋ค.
head๊ฐ ๋ฐฐ์ด์ count์ ๊ฐ๊ฑฐ๋ ํฐ ๊ฒฝ์ฐ๋ ํ๊ฐ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ ์ํ๋ฅผ ๋ํ๋ ๋๋ค.
์๋ฅผ ๋ค์ด, ๋ค์๊ณผ ๊ฐ์ ํ ์ํ์์ head๊ฐ ํ์ count์ ๊ฐ๊ฑฐ๋ ํฐ ๊ฒฝ์ฐ์๋ ํด๋น ํ๊ฐ ๋ฐ์ดํฐ๊ฐ ์๋ ์ํ์ ๋๋ค.
(์๋๋ count์ head๊ฐ 4๋ก ๊ฐ์ ์ํฉ์ ๋๋ค.)
[nil, nil, nil, nil]
		   head
๋ฐฐ์ด์ ๋ฒ์ ๋ด์์ dequeue๋ฅผ ์ํํ๋ฉด, head ์ธ๋ฑ์ค์ ๋ฐ์ดํฐ๋ฅผ nil๋ก ๋ณ๊ฒฝํ๊ณ head๋ฅผ ๋ค์ ์ธ๋ฑ์ค๋ฅผ ๊ฐ๋ฆฌํค๋๋ก +1์ ํด์ฃผ๋ฉด ๋ฉ๋๋ค.
๊ทธ๋ฌ๋ ์ด๋ฌํ ๋์๋ง ๊ณ์ํ๋ฉด ๋ฐฐ์ด์ ๊ณ์ํด์ nil๋ก ์ค์ ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ฒ ๋๋๋ฐ, ์ด๋ ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๋ก ์ด์ด์ง ์ ์์ต๋๋ค. ์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ์ ์ ํ ์์ ์ dequeue๋ ์๋ฃ๋ค์ ์ ๋ฆฌํ๋ ์์ ์ ์ถ๊ฐํฉ๋๋ค.
์์ ์ ํ๊ฒฝ์ ๋ง์ถ์ด ์ ์ ํ ๋์ ์ํ๋๋๋ก ์ค์ ๋์ด์ผ ํฉ๋๋ค.
์ฌ๊ธฐ์๋ ๋ฐฐ์ด์ ์ต์ 50๊ฐ์ ์์๊ฐ ์์ด์ผ ํ๋ฉฐ(๋ฐฐ์ด ํฌ๊ธฐ๊ฐ ์์ ๊ฒฝ์ฐ์๋ ๊ณต๊ฐ ๋ญ๋น๊ฐ ํฐ ๋ฌธ์ ๊ฐ ์๋๋ฏ๋ก ๋ฌด์ํ ์ ์์ต๋๋ค), ๊ทธ ์ค 25% ์ด์์ด ์ฌ์ฉ๋์ง ์๋ ๊ฒฝ์ฐ์ ํด๋น ๋ถ๋ถ์ nil๋ก ์ค์ ๋ ๋ฐ์ดํฐ๋ค์ ์ ๊ฑฐํ๋ ์์ ์ ์ํํ๋๋ก ๊ตฌํํ ๊ฒ์ ๋๋ค.
๋ง์ง๋ง์ผ๋ก, ์ญ์ ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฆฌํดํด์ฃผ๋ฉฐ ๋ฉ์๋๋ฅผ ์ข ๋ฃํฉ๋๋ค.
โญ๏ธโญ๏ธ ์ฃผ์ โญ๏ธโญ๏ธ
๋ง์ ๋ธ๋ก๊ทธ ๊ธ์์ head์ count์ ๊ฐ์ด ๊ฐ์ ๋๋ ๋ฉ์๋๋ฅผ ์คํ์ํค๋ ๊ฒฝ์ฐ๊ฐ ๋ง์๋ฐ ์ฃผ์ํ์ธ์!
์ธ๋ฑ์ค๋ 0๋ถํฐ ์์ํ๊ณ , count๋ 1๋ถํฐ ์์ํด์ ํท๊ฐ๋ฆด์ ์๋๋ฐ..
(๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ dequeueํ๊ณ ํ ๋ฒ ๋ ๋ฉ์๋๋ฅผ ์คํํ๋ฉด ๋ฐฐ์ด์์ ๋ฒ์ด๋ ์ธ๋ฑ์ค๋ฅผ ์ ๋ ฅํ์ฌ ์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค.)
// ์๋ชป๋ ์ฝ๋ ์์
guard head <= datas.count, let element = datas[head] else { return nil }
์กฐํ (count, isEmpty, front) - O(1)
// ํ์ฌ ํ์ ์๋ ์์์ ๊ฐ์
var count: Int {
    return datas.count - head
}
// ํ๊ฐ ๋น์ด์๋์ง ์ฌ๋ถ๋ฅผ ๋ฐํ
var isEmpty: Bool {
    return count == 0
}
// ํ์ฌ ํ์ ๋งจ ์์ ์๋ ์์๋ฅผ ๋ฐํํ๋ ๋ฉ์๋
func front() -> T? {
    if isEmpty {
        return nil
    } else {
        return datas[head]
    }
}
์ฌ๊ธฐ๋ ์ค์ํ๊ฒ ๋ด์ฃผ์ธ์! โญ๏ธโญ๏ธโญ๏ธ
(์ฌ๋ฌ ๋ธ๋ก๊ทธ๋ค์ด ์ฌ๊ธฐ๋ฅผ ๊ฝค ํ๋ฆฌ์ ๊ฑฐ ๊ฐ์๋ฐ.. ์ ๊ฐ ๋ง๊ฒ ์ฃ ..?ใ )
๋ง์ ๋ถ๋ค์ด ์๋ ์ฃผ์ ์ฝ๋๋ฅผ ๋ณด์๋ ๊ฒ์ฒ๋ผ ๊ทธ๋ฅ ํ ๋ฐฐ์ด์ count์ isEmpty ํ๋กํผํฐ๋ฅผ ์ด์ฉํ์๋๋ผ๊ณ ์ ?!
๊ทธ๋ฌ๋, ์ด ๊ฒฝ์ฐ์๋ ์กฐ๊ธ ๋ ์ฃผ์๊ฐ ํ์ํฉ๋๋ค!
์ฐ๋ฆฌ๋ ํ์ฌ ํ์ dequeue ๋ฉ์๋๋ฅผ ๋ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ ์ํด
๋ฐ์ดํฐ๋ฅผ ์ค์ ๋ก ๋ฐฐ์ด์์ ์ญ์ ํ๋ ๊ฒ์ด ์๋๋ผ, nil๋ก ๋ฐ๊พธ๊ณ head๋ก ์ฒซ ๋ฒ์งธ ๋ฐ์ดํฐ ์ธ๋ฑ์ค๋ฅผ ๊ด๋ฆฌํ๊ณ ์์ต๋๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ datas ๋ฐฐ์ด์๋ nil์ธ ๋ฐ์ดํฐ๋ค์ด ์กด์ฌํ๋ค๊ณ ์๊ฐํด์ผ ํฉ๋๋ค!
๋ฐฐ์ด์ count์ isEmpty ํ๋กํผํฐ๋ nil์ ์ ์ธํ๊ณ ์๊ฐํ์ง ์๊ธฐ ๋๋ฌธ์, ์ฐ๋ฆฌ๋ ์ด nil๋ก ๋ฐ๋ ๋ฐ์ดํฐ๋ค๋ ์ ๊ฒฝ ์จ์ค์ผ ํฉ๋๋ค.
๋ฐ๋ผ์ ์์ ์ฝ๋์ฒ๋ผ count๋ฅผ ๊ณ์ฐํ ๋ head๋ฅผ ๊ณ ๋ คํ์ฌ ๋ฐ์ํด์ฃผ์ด์ผ ํฉ๋๋ค.

์๋์ ๋ฌ๋ฆฌ ์ ๋๋ก ๋์ค๋ ๊ฒ ๊ฐ์ฃ ?!

โญ๏ธโญ๏ธ ์ฃผ์ โญ๏ธโญ๏ธ
// ์๋ชป๋ ์ฝ๋
public var count: Int {
    return datas.count
}
public var isEmpty: Bool {
    return datas.isEmpty
}
์ด๋๋ก ์ฝ๋๋ฅผ ๋์ํด๋ณด๋ฉด, ๊ฐ์ด ์ ๋๋ก ๋์ค์ง ์์ต๋๋ค!

๋ค๋ฅธ ๋ฐฉ์์ผ๋ก Queue ๋ง๋ค๊ธฐ
์์ ์ฝ๋๊ฐ ์๋, ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก๋ ๋ง์ด ๋ง๋์๋๋ฐ..
์ ๋ ์ผ๋จ ์ฐธ๊ณ ๋ง ํ ๊ฒ์.๐
- ๋ ๊ฐ์ ์คํ์ ์ด์ฉํ์ฌ Queue ๊ตฌํํ๊ธฐ
[์๋ฃ๊ตฌ์กฐ] Swift ๋ก Queue ๊ตฌํํ๊ธฐ;
- ๋งํฌ๋ ๋ฆฌ์คํธ๋ฅผ ์ด์ฉํด์ ๊ตฌํํ๊ธฐ
์ค์ํํธ๋ก ๊ตฌํํ๋ ์๋ฃ๊ตฌ์กฐ 3: ํ(Queue)
Swift ์ ์ฒด ์ฝ๋
struct Queue<T> {
    // ํ์ ์์๋ค์ ๋ด์ ๋ฐฐ์ด, head ์ธ๋ฑ์ค๋ฅผ ์ ์ง
    private var datas: [T?] = []
    private var head: Int = 0
    
    // ํ์ฌ ํ์ ์๋ ์์์ ๊ฐ์
    var count: Int {
        return datas.count - head
    }
    
    // ํ๊ฐ ๋น์ด์๋์ง ์ฌ๋ถ๋ฅผ ๋ฐํ
    var isEmpty: Bool {
        return count == 0
    }
    
    // ํ์ ์์๋ฅผ ์ถ๊ฐํ๋ ๋ฉ์๋
    mutating func enqueue(_ element: T) {
        datas.append(element)
    }
    
    // ํ์์ ์์๋ฅผ ์ ๊ฑฐํ๊ณ  ๋ฐํํ๋ ๋ฉ์๋
    mutating func dequeue() -> T? {
        // ํ๊ฐ ๋น์ด์๊ฑฐ๋ head๊ฐ ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ฉด nil ๋ฐํ
        guard head < datas.count, let element = datas[head] else { return nil }
        
        datas[head] = nil // head์ ํด๋นํ๋ ์์๋ฅผ nil๋ก ์ค์ 
        head += 1 // head๋ฅผ ์ฆ๊ฐ์์ผ ๋ค์ ์์๋ก ์ด๋
        
        let percentage = Double(head) / Double(datas.count)
        
        // head๊ฐ ๋ฐฐ์ด์ ์๋ถ๋ถ์ ์์๊ฐ ๋ง์ด ๋จ์์์ผ๋ฉด ๋ฐฐ์ด์ ์ ๋ฆฌ
        if percentage > 0.25 && head > 50 {
            datas.removeFirst(head) // head ๊ฐ์๋งํผ ์์๋ฅผ ๋ฐฐ์ด์์ ์ ๊ฑฐ
            head = 0
        }
        
        return element
    }
    
    // ํ์ฌ ํ์ ๋งจ ์์ ์๋ ์์๋ฅผ ๋ฐํํ๋ ๋ฉ์๋
    func front() -> T? {
        if isEmpty {
            return nil
        } else {
            return datas[head]
        }
    }
}
๋ง๋ฌด๋ฆฌ
๊ฐ๋จํ ๋ง๋ฌด๋ฆฌํ ์ ์์์ง๋ง, ์ฝ๋ ์์ฑ๊ณผ ์คํ์ ๊ฑฐ์ณ๋ณด๋ ์์์น ๋ชปํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค.
๋๋ถ์ ๋ค๋ฅธ ๋ธ๋ก๊ทธ์์๋ ์๋ชป๋ ๋ด์ฉ์ ๋ฐ๊ฒฌํ ์ ์์์ต๋๋ค!
์์ผ๋ก๋ ๋ธ๋ก๊ทธ ๊ธ์ ๋ฌด์กฐ๊ฑด ๋ฏฟ์ง ๋ง๊ณ ๋๊ตฌ๋ก ํ์ฉํ๋, ๋ฐ๋์ ์ ํํ ์ ๋ณด์ธ์ง ํ์ธํ๋ ์ต๊ด์ ๊ฐ๋ ๊ฒ์ด ์ค์ํด๋ณด์ ๋๋ค.
์ฐ๋ฆฌ๋ ๊ณต์ ๋ฌธ์๋ฅผ ๋ ์ ๋ขฐํ๊ณ , ์ ๋ณด๋ฅผ ๊ฒ์ฆํ๋ ๊ณผ์ ์ ์ํํํ์ง ์์์ผ ํฉ๋๋ค. ๐ก
์๋ชป๋ ๋ด์ฉ์ด๋ ๊ถ๊ธํ์ ์ ์ด ์๋ค๋ฉด ๋๊ธ ๋จ๊ฒจ์ฃผ์ธ์. ๐ค
์ฝ์ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
๐ ์ฐธ๊ณ ์๋ฃ
ํ๊ตญ์ธ๋ ์ ์ฐฌ์ ๊ต์๋์ Data Structures with Python ๊ฐ์
[์๋ฃ๊ตฌ์กฐ] Swift๋ก ๊ตฌํํ๋ Queue (ํ)
Swift) ํ(Queue) ๊ตฌํ ํด๋ณด๊ธฐ
https://github.com/kodecocodes/swift-algorithm-club/tree/master/Queue
'Computer > Data Structure' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ํด์ ํ ์ด๋ธ(Hash Table)์ ๋์๊ด. (5) | 2024.03.08 | 
|---|---|
| [Swift] ์ฐ๊ฒฐ ๋ฆฌ์คํธ(Linked List)๋ ์งํ์ฒ . (feat. ์ค๊ตญ์ด์ฐจ) (5) | 2024.03.01 | 
| [Swift] ์คํ(Stack)์ ํ๋ง๊ธ์ค. (1) | 2024.01.23 | 
| ์๋ฃ ๊ตฌ์กฐ(Data Structure), ์๊ณ ๋ฆฌ์ฆ(Algorithms) ๊ทธ๊ฒ ๋ญ์ผ... ? (0) | 2024.01.16 | 
- ๊ท๋๋ผ๋ฏธ ์์ด
 - remainder
 - ์คํ
 - ํ๊ณ
 - Container View Controller
 - 2024๋  ๋ชฉํ
 - ํ
 - ๋ฒ์ฉ๊ณ ์ ์๋ณ
 - tipkit
 - pageViewController
 - ์์ด ๋ด์ค
 - BOJ
 - C++
 - ๊ท๋๋ผ๋ฏธ ์์ด
 - Anyobject
 - ๊ดํธ์ ๊ฐ
 - ๊ณต๊ฐ ๋ณต์ก๋
 - root view controller
 - 2023๋  ํ๊ณ
 - ์๋ฃ ๊ตฌ์กฐ
 - ์ํํธ์คํฌ
 - 24๋  ํ๊ณ
 - ๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ
 - ์์ด ๊ณต๋ถ
 - ๊ฐ๋ฐ์
 - ์๋ฐฉํฅ ์ฐ๊ฒฐ ๋ฆฌ์คํธ
 - Swift
 - 10808
 - containerView
 - ์ ํ์์นด๋ฐ๋ฏธ
 
- Total
 
- Today
 
- Yesterday