๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โŒจ๏ธ Language/swift

[Swift] ์Šคํƒ(Stack) ๊ตฌํ˜„ํ•˜๊ธฐ

by hyebin (Helia) 2024. 9. 27.
๋ฐ˜์‘ํ˜•

Stack์„ ๊ตฌ์กฐ์ฒด์™€ ๋ฐฐ์—ด๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋จผ์ € ์ œ๋„ค๋ฆญ์„ ์ด์šฉํ•ด Stack ๊ตฌ์กฐ์ฒด๋ฅผ ์ •์˜ํ•˜๊ณ , ์ฃผ์š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

struct Stack<T> {
    private var stack: [T] = []
    
    var isEmpty: Bool {
        return stack.isEmpty
    }
    
    var count: Int {
        return stack.count
    }
    
    var peek: T? {
        return stack.last
    }
    
    mutating func push(_ element: T) {
        stack.append(element)
    }
    
    mutating func pop() -> T? {
        return stack.popLast()
    }
}

 

์œ„ ์ฝ”๋“œ์—์„œ๋Š” Stack์˜ ๊ธฐ๋ณธ ๋™์ž‘์„ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

  1. push(_:): ์Šคํƒ์— ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  2. pop(): ์Šคํƒ์˜ ๋งจ ์œ„ ์š”์†Œ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  3. isEmpty: ์Šคํƒ์ด ๋น„์–ด์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  4. count: ์Šคํƒ์˜ ์š”์†Œ ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  5. peek: ์Šคํƒ์˜ ๋งจ ์œ„ ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜์ง€๋งŒ ์ œ๊ฑฐํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

์ด Stack ๊ตฌ์กฐ์ฒด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

var intStack = Stack<Int>()
intStack.push(1)
intStack.push(2)
intStack.push(3)

print(intStack.pop())  // ์ถœ๋ ฅ: Optional(3)
print(intStack.peek) // ์ถœ๋ ฅ: Optional(2)
print(intStack.count)  // ์ถœ๋ ฅ: 2
print(intStack.isEmpty) // ์ถœ๋ ฅ: false

 

 

๋˜ํ•œ, Stack์„ ๋ณ„๋„์˜ ๊ตฌ์กฐ์ฒด๋กœ ๊ตฌํ˜„ํ•˜์ง€ ์•Š๊ณ ๋„ Array๋ฅผ ์‚ฌ์šฉํ•ด ๋น„์Šทํ•œ ๋ฐฉ์‹์œผ๋กœ Stack์ฒ˜๋Ÿผ ๋™์ž‘ํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

var arrayStack = [Int]()
arrayStack.append(1)  // push
arrayStack.append(2)
print(arrayStack.popLast() ?? 0)  // pop
print(arrayStack.last ?? 0)  // peek

 

Array๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ฝ”๋“œ๊ฐ€ ๊ฐ„๋‹จํ•˜๊ณ  ์ง๊ด€์ ์ด์ง€๋งŒ, ๋ช‡ ๊ฐ€์ง€ ๋‹จ์ ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋งค๋ฒˆ ์Šคํƒ ์—ฐ์‚ฐ(push, pop ๋“ฑ)์„ ๋ช…์‹œ์ ์œผ๋กœ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์ด ๋ฐฐ์—ด์ด ์Šคํƒ์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค๋Š” ์˜๋„๊ฐ€ ๋ช…ํ™•ํ•˜์ง€ ์•Š์•„ ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฝ”๋“œ๋ฅผ ์ดํ•ดํ•˜๋Š” ๋ฐ ์–ด๋ ค์›€์„ ๊ฒช์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

Stack ๊ตฌํ˜„ํ•  ๊ฒฝ์šฐ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

  • ์ธํ„ฐํŽ˜์ด์Šค ์ œํ•œ: ์Šคํƒ์˜ ๋ฌด๊ฒฐ์„ฑ์„ ์œ ์ง€ํ•˜๋ฉฐ, ๋ถˆํ•„์š”ํ•œ ์—ฐ์‚ฐ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ถ”์ƒํ™”: ๋‚ด๋ถ€ ๊ตฌํ˜„์„ ์ˆจ๊ธฐ๊ณ , ์Šคํƒ์˜ ์˜๋„๋œ ์‚ฌ์šฉ๋งŒ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ํƒ€์ž… ์•ˆ์ •์„ฑ: ์ œ๋„ค๋ฆญ์„ ์‚ฌ์šฉํ•ด ๋‹ค์–‘ํ•œ ํƒ€์ž…์— ๋Œ€ํ•œ ์•ˆ์ „ํ•œ ์Šคํƒ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” Array์™€ ๊ฑฐ์˜ ๋™์ผํ•˜์ง€๋งŒ, ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ, ์•ˆ์ •์„ฑ, ์œ ์ง€๋ณด์ˆ˜์„ฑ ์ธก๋ฉด์—์„œ ํŒ€ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” Stack ๊ตฌ์กฐ์ฒด๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ๋” ์œ ๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ˜์‘ํ˜•