[DataStructure] ์Šคํƒ

2024. 5. 1. 14:58ยทlearnings/Algorithm&DS

0. ๋“ค์–ด๊ฐ€๊ธฐ

ํ”„๋กœ๊ทธ๋žจ์˜ ์ž๋™ ๋ฉ”๋ชจ๋ฆฌ, ๋„คํŠธ์›Œํฌ ํ”„๋กœํ† ์ฝœ, ์—ฌ๋Ÿฌ ํ…Œ์ŠคํŠธ ํ”„๋กœ๊ทธ๋žจ ๋“ฑ ์—ฌ๋Ÿฌ ๊ณณ์—์„œ ๊ณตํ†ต์ ์œผ๋กœ ์“ฐ์ด๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์•Œ๊ณ  ๊ณ„์‹ ๊ฐ€์š”?
๋ฐ”๋กœ ์Šคํƒ์ž…๋‹ˆ๋‹ค! ์˜ค๋Š˜์€ ์Šคํƒ์„ ์ง์ ‘ ๊ตฌํ˜„ํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

1.  ๊ตฌ์กฐ


์žฌ๊ท€ํ•จ์ˆ˜๊ฐ€ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ๊ถ๊ธˆํ•˜์‹  ์  ์—†์œผ์‹ ๊ฐ€์š”? ์ด๋ฏธ ์•Œ๊ณ  ๊ณ„์‹œ๋‹ค๊ตฌ์š”?
์žฌ๊ท€ํ•จ์ˆ˜๋Š” ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ์„œ๋ธŒ๋ฃจํ‹ด์— ๊ด€ํ•œ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ์ฝœ์Šคํƒ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฃจํ‹ด์„ ์ฒ˜๋ฆฌํ•˜๊ณ , ์ƒ์œ„ ๋ฃจํ‹ด์œผ๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค.
์ด๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์ฝœ ์Šคํƒ์ด ์Šคํƒ๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์ฃ !

์Šคํƒ(stack)์€ ๋ญ”๊ฐ€๋ฅผ ์Œ“์•„๋†“์€ '๋”๋ฏธ'๋ฅผ ๋œปํ•ฉ๋‹ˆ๋‹ค. ๊ฑด์ดˆ๋”๋ฏธ, ์„œ๋ฅ˜๋”๋ฏธ, ์˜ท๋”๋ฏธ ๋“ฑ์„ ์˜ˆ๋กœ ๋“ค์ˆ˜ ์žˆ๊ฒ ์Šต๋‹ˆ๋‹ค.
์‹œ๊ฐ์ ์œผ๋กœ๋Š” ์ œ์ผ ๋จผ์ € ๋“ค์–ด์˜จ ๋ฐ์ดํ„ฐ๊ฐ€ ์ œ์ผ ๋ฐ‘์—์— ์œ„์น˜ํ•˜๊ณ , ์ œ์ผ ๋‚˜์ค‘์— ๋“ค์–ด์˜จ ๋ฐ์ดํ„ฐ๊ฐ€ ์ œ์ผ ์œ„์— ์œ„์น˜ํ•ฉ๋‹ˆ๋‹ค.
๋ฐ์ดํ„ฐ๊ฐ€ ์˜ค๊ฐ€๋Š” ํ†ต๋กœ๋Š” ์ œ์ผ ์œ„์— ํ•˜๋‚˜๋งŒ ์กด์žฌํ•˜๊ณ , ์ด๋ฅผ push/pop์œผ๋กœ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
ํ•˜๋‚˜์˜ ๊ตฌ๋ฉ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ€์–ด๋„ฃ๊ณ , ๊ตฌ๋ฉ์—์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ํŠ€์–ด๋‚˜์˜ค๋Š” ๋ชจ์Šต์ด ๊ทธ์•ผ๋ง๋กœ push์™€ pop ์ž…๋‹ˆ๋‹ค.

2. ๊ตฌํ˜„

์Šคํƒ ๋ญ ์–ด๋ ค์šธ ๊ฒƒ ์žˆ๊ฒ ์Šต๋‹ˆ๊นŒ ๋ฐ”๋กœ ๊ฐ€๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

struct Stack<T>{
    private var stack: [T] = []
    var count: Int{
        return self.stack.count
    }
    var isEmpty: Bool{
        return stack.isEmpty
    }
    var top: T?{
        return stack.last
    }
}

์ œ๋„ค๋ฆญ์„ ์ฑ„ํƒํ•œ ๊ตฌ์กฐ์ฒด๋ฅผ ์ •์˜ํ•˜๊ณ , swift์˜ ๊ธฐ๋ณธ ์ž๋ฃŒํ˜•์ธ Array๋ฅผ private๋กœ ์ƒ์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.
ํ˜„์žฌ ๋ฐ์ดํ„ฐ์˜ ๊ฐฏ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” count, ๋น„์–ด์žˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•˜๋Š” isEmpty, ์ตœ์ƒ์œ„ ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” top๋ฅผ ํ”„๋กœํผํ‹ฐ๋กœ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

    ///์ƒˆ ๋…ธ๋“œ๋ฅผ ์Šคํƒ ์œ„์— ์˜ฌ๋ฆผ
    mutating func push(_ data: T){
        self.stack.append(data)
    }
    ///์Šคํƒ ์ตœ์ƒ๋‹จ ๋…ธ๋“œ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ ํ›„ ๋…ธ๋“œ ์‚ญ์ œ
    mutating func pop()->T?{
        return self.stack.popLast()
    }

 

๊ตฌ์กฐ์ฒด์ด๊ธฐ ๋•Œ๋ฌธ์— mutating func๋กœ ๋ฐฐ์—ด์„ ์กฐ์ž‘ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. (Swift์˜ ํ‚ค์›Œ๋“œ๋Š”... ๋‚˜์ค‘์— ์ œ๋Œ€๋กœ ์ •๋ฆฌํ• ๊ฒŒ์š”...!)
Array๋Š” O(1)์ธ append์™€ popLast๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  ์—ฐ์‚ฐ์ด ์ƒ์ˆ˜์‹œ๊ฐ„ ์•ˆ์— ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

popLast์™€ removeLast์˜ ์ฐจ์ด๋ฅผ ์•Œ๊ณ  ๊ณ„์‹ ๊ฐ€์š”?
๋‘ ๋ฉ”์†Œ๋“œ๋Š” ๊ณตํ†ต์ ์œผ๋กœ Array์˜ ๋งˆ์ง€๋ง‰ ์š”์†Œ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ , ์ œ๊ฑฐํ•œ ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ removeLast๋Š” ์‚ฌ์šฉ์— ์ „์ œ์กฐ๊ฑด์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋“œ์‹œ ๋น„์–ด์žˆ์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด์ฃ !

์ด๋Ÿฌํ•œ ํŠน์ง•์œผ๋กœ ๋‹น์—ฐํ•˜๊ฒŒ๋„ ๋‘ ๋ฉ”์†Œ๋“œ๋Š” ๋ฐ˜ํ™˜ ํƒ€์ž…์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

removeLast๋Š” ์˜ต์…”๋„์ด ์•„๋‹™๋‹ˆ๋‹ค.
popLast๋Š” ์˜ต์…”๋„์ž…๋‹ˆ๋‹ค.

(์—ฌ๋‹ด์œผ๋กœ ์ฝ”ํ…Œํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์€ removeLast๊ฐ€ ์ข€ ๋” ๋น ๋ฆ…๋‹ค๊ณ  ํ•ฉ๋””๋‹ค)

์ „์ฒด ์†Œ์Šค์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

struct Stack<T>{
    var count: Int{
        return self.stack.count
    }
    var isEmpty: Bool{
        return stack.isEmpty
    }
    var top: T?{
        return stack.last
    }
    private var stack: [T] = []
    ///์ƒˆ ๋…ธ๋“œ๋ฅผ ์Šคํƒ ์œ„์— ์˜ฌ๋ฆผ
    mutating func push(_ data: T){
        self.stack.append(data)
    }
    ///์Šคํƒ ์ตœ์ƒ๋‹จ ๋…ธ๋“œ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ ํ›„ ๋…ธ๋“œ ์‚ญ์ œ
    mutating func pop()->T?{
        return self.stack.popLast()
    }
}

๋งˆ๋ฌด๋ฆฌ

๊ฐ„๋‹จํ•˜๊ฒŒ ์Šคํƒ์„ ๊ตฌํ˜„ํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์ด๋ฏธ Array์— ํ•„์š”ํ•œ ๋ฉ”์†Œ๋“œ๊ฐ€ ๋‹ค ๊ตฌํ˜„๋˜์–ด์žˆ์–ด ๋ž˜ํ•‘ํ•œ๊ฒƒ์— ๋ถˆ๊ณผํ•ฉ๋‹ˆ๋‹ค๋งŒ...

Swift๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ž…์žฅ์—์„œ ์Šคํƒ์€ ์ •๋ง ์š”๊ธดํ•œ ์ ์ด, ์ž๋ฃŒ์˜ ์‚ฝ์ž…๊ณผ ์‚ญ์ œ๊ฐ€ ์ƒ์ˆ˜์‹œ๊ฐ„์— ์ด๋ฃจ์–ด์ง„๋‹ค๋Š” ์ ์—์„œ ๋‹ค์–‘ํ•˜๊ฒŒ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ํ๋ฅผ ๋‚ด์žฅํ•˜๊ณ ์žˆ์ง€ ์•Š์€ Swift์—์„œ, ์Šคํƒ ๋‘๊ฐœ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‚˜์˜์ง€ ์•Š์€ ์„ฑ๋Šฅ์˜ ํ๋ฅผ ๋น ๋ฅด๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋˜ํ•œ ํ•ด๋‹น ํ๋ฅผ ๋‹ค์‹œ 2๊ฐœ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์–‘๋ฐฉํ–ฅ ์ž…์ถœ๋ ฅ์„ ์ง€์›ํ•˜๋Š” ํ์ธ ๋ฑ๋„ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์ฃ !

ํ์™€ ๋ฑ์œผ๋กœ ๋‹ค์Œ ํฌ์ŠคํŒ…์—์„œ ๋งŒ๋‚˜์š”!

'learnings > Algorithm&DS' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[DataStructure] ํ 1๋ถ€  (1) 2024.05.01
[Algorithm] ์ฐจ๋Ÿ‰๊ธฐ์ง€ ์•Œ๊ณ ๋ฆฌ์ฆ˜, ์Šคํƒ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ค‘์œ„ ํ‘œ๊ธฐ๋ฒ•์„ ํ›„์œ„ ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ ๋ณ€ํ™˜  (0) 2024.04.05
[DataStructure] ํ™˜ํ˜• ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ๋ฅผ Swift๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ  (0) 2024.03.26
[DataStructure] ์ด์ค‘ ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ๋ฅผ Swift๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ  (0) 2024.03.25
[DataStructure] ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ๋ฅผ Swift๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ  (0) 2024.03.20
'learnings/Algorithm&DS' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [DataStructure] ํ 1๋ถ€
  • [Algorithm] ์ฐจ๋Ÿ‰๊ธฐ์ง€ ์•Œ๊ณ ๋ฆฌ์ฆ˜, ์Šคํƒ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ค‘์œ„ ํ‘œ๊ธฐ๋ฒ•์„ ํ›„์œ„ ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ ๋ณ€ํ™˜
  • [DataStructure] ํ™˜ํ˜• ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ๋ฅผ Swift๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ
  • [DataStructure] ์ด์ค‘ ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ๋ฅผ Swift๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ
Une.
Une.
์ด์ง„์„ธ์ƒ์† ์ž์œ ๋ฅผ ์ฐพ๋Š” ์‚ฌ๋žŒ์ด ๋‚จ๊ธด ๊ธฐ๋ก
  • Une.
    Une's Dev-log๐Ÿ
    Une.
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • \ (35)
      • log (4)
      • mac (2)
      • learnings (28)
        • ํšŒ๊ณ  (0)
        • Swift (10)
        • PS (10)
        • Algorithm&DS (6)
        • c++ (2)
      • CS (1)
        • ๋„คํŠธ์›Œํฌ (1)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ๋ฐฉ๋ช…๋ก
    • ๊ด€๋ฆฌ์ž
    • ๊ธ€์“ฐ๊ธฐ
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ํ† ์ดํ”„๋กœ์ ํŠธ
    ์ž๋ฃŒ๊ตฌ์กฐ
    ๊ฐ•ํ•œ์ฐธ์กฐ
    ์ฝ”๋“œ์—…
    BFS
    wwdc25
    swift
    ํ™˜ํ˜•๋งํฌ๋“œ๋ฆฌ์ŠคํŠธ
    ๋ฐฑ์ค€
    C++
    ios
    swift 6.2
    ๋”๋ธ”๋ฆฌ๋งํฌ๋“œ๋ฆฌ์ŠคํŠธ
    DFS
    ์Šคํƒ
    PS
    ์ฐจ๋Ÿ‰๊ธฐ์ง€์•Œ๊ณ ๋ฆฌ์ฆ˜
    ์•Œ๊ณ ๋ฆฌ์ฆ˜
    ๊ทธ๋ฆฌ๋””
    ๋งฅ
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
Une.
[DataStructure] ์Šคํƒ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”