๊ธ€ ์ž‘์„ฑ์ž: ๊ฐœ๋ฐœํ•˜๋Š” ํ›ˆ์ด

์Šคํƒ (Stack)

์Šคํƒ์€ LIFO(Last In First Out)์˜ ํŠน์ง•์„ ๊ฐ€์ง€๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. ์Šคํƒ์€ ์ž๋ฃŒ๋ฅผ ์ €์žฅํ•  ๋•Œ, ๋จผ์ € ๋„ฃ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ๊บผ๋‚ด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์Šค์œ„ํ”„ํŠธ์˜ ๋ฐฐ์—ด์€ ์Šคํƒ๊ณผ ๋™์ผํ•œ append, removeLast ๋ฉ”์„œ๋“œ๋ฅผ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฐ์—ด์„ ํ•œ ๋ฒˆ ๊ฐ์‹ธ์ฃผ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ผˆ๋Œ€ ๋งŒ๋“ค๊ธฐ

struct Stack<T> {
    var elements: [T] = []
    
    var count : Int {
        return elements.count
    }
    var isEmpty : Bool {
        return elements.isEmpty
    }
}

๋จผ์ €, ์ œ๋„ค๋ฆญ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ๋ฐฐ์—ด ํ•˜๋‚˜๋ฅผ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค. ์Šคํƒ์— ๋‹ด๊ธด ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜์™€ ์Šคํƒ์ด ๋น„์–ด์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋Š” ์Šค์œ„ํ”„ํŠธ์—์„œ ์ œ๊ณตํ•˜๋Š” count ์—ฐ์‚ฐ ํ”„๋กœํผํ‹ฐ์™€ isEmpty ์—ฐ์‚ฐ ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋ฉด ๋˜๊ฒ ์ฃ ?

 

์‚ฝ์ž…(push) - O(1)

    mutating func push(_ element: T) {
        elements.append(element)
    }

์‚ฝ์ž…๋„ ๋ฐฐ์—ด์˜ append ๋ฉ”์„œ๋“œ๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

์กฐํšŒ(top) - O(1)

    func top() -> T? {
        return elements.last
    }

์Šคํƒ์˜ ์กฐํšŒ๋Š” ํŠน์ •ํ•œ ์š”์†Œ๋ฅผ ์กฐํšŒํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์Šคํƒ์˜ ๊ฐ€์žฅ ์œ„์— ์Œ“์—ฌ์žˆ๋Š” ์š”์†Œ๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฐฐ์—ด์˜ last ํ”„๋กœํผํ‹ฐ๋ฅผ ํ†ตํ•ด ๋งˆ์ง€๋ง‰ ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

 

์‚ญ์ œ(pop) - O(1)

    mutating func pop() -> T? {
        return elements.popLast()
    }

์‚ญ์ œ๋„ ๊ทธ๋Œ€๋กœ... ํ•œ ๊ฐ€์ง€ ํŒ์€ removeLast๋Š” ๋ฐฐ์—ด์ด ๋น„์–ด์žˆ์„ ๋•Œ ์‚ฌ์šฉํ•˜๋ฉด ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค์ง€๋งŒ, popLast๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐฐ์—ด์ด ๋น„์–ด์žˆ์„ ๋•Œ๋Š” nil์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

removeLast
popLast

์ „์ฒด ์ฝ”๋“œ

 

์Šคํƒ์€ ๋ฐฐ์—ด ๊ทธ ์ž์ฒด๋ผ์„œ ํฌ๊ฒŒ ์ž์„ธํžˆ ์ž‘์„ฑํ•  ๋‚ด์šฉ์ด ์—†๋„ค์š”..! ์ด๋ ‡๊ฒŒ ๊ฐ€๋ณ๊ฒŒ ์‹œ์ž‘ํ•ด์„œ ์ž๋ฃŒ๊ตฌ์กฐ ์‹œ๋ฆฌ์ฆˆ๋ฅผ ๋‹ฌ๋ ค๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค! ๐Ÿ’ช

 

 

GitHub - jeonyeohun/Data-Structures-In-Swift: ๐Ÿ‘ท๐Ÿป‍โ™‚๏ธ STL ์™œ ์—†์–ด.. ์Šค์œ„ํ”„ํŠธ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ

๐Ÿ‘ท๐Ÿป‍โ™‚๏ธ STL ์™œ ์—†์–ด.. ์Šค์œ„ํ”„ํŠธ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ. Contribute to jeonyeohun/Data-Structures-In-Swift development by creating an account on GitHub.

github.com

์ž๋ฃŒ๊ตฌ์กฐ ์‹œ๋ฆฌ์ฆˆ์˜ ์ฝ”๋“œ๋“ค์€ ์ด ๋ ˆํฌ์—์„œ ๋ชจ๋‘ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”!