ํฐ์คํ ๋ฆฌ ๋ทฐ
์คํ์ ๋ฐ์ดํฐ ๊ฐ์ ์ ์ฅํ๋ ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์กฐ๋ก ์ผ์ฐจ์์ ์ ํ(linear) ์๋ฃ๊ตฌ์กฐ์ด๋ฉฐ, LIFO ์์น์ ๋ฐ๋ฆ ๋๋ค.
LIFO๋ Last In First Out ์์น์ผ๋ก,
๋ฐฐ์ด์ ๋ฐ์ดํฐ๋ฅผ ๋ค์ด์จ ์์๋๋ก ๋ฃ๊ณ (Push), ๊ฐ์ฅ ๋ฆ๊ฒ ๋ค์ด์จ ๋ฐ์ดํฐ๋ฅผ ๋จผ์  ๊บผ๋ด๋ ๊ฒ(Pop)์ ์๋ฏธํฉ๋๋ค.
๋ฌด์จ ๋ง์ด์ง ์ ๋ชจ๋ฅด๊ฒ ๋ค๋ฉด…
์ด ๊ธ์ ์ ๋ชฉ์ฒ๋ผ ์คํ์ ํ๋ง๊ธ์ค.๋ฅผ ์๊ฐํ๋ฉด ์ฝ์ต๋๋ค!
ํ๋ง๊ธ์ค๋ฅผ ํฌ์ฅํ ๋๋ ์๋๋ถํฐ ์ฐจ๋ก๋๋ก ์๊ฒ ์ง๋ง, ์ฐ๋ฆฌ๊ฐ ๋จน์ ๋๋ ์ ์ผ ๋ง์ง๋ง์ ๋ฃ์ ๊ณผ์๋ฅผ ๋จผ์  ๋จน๊ฒ ์ฃ !
์ด๋ฐ ๊ฒ์ ๋ฐ๋ก LIFO ์์น์ ๊ฐ์ง Stack ๊ตฌ์กฐ๋ก ์๊ฐํ๋ฉด ๋ฉ๋๋ค.

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

Swift๋ก Stack ๊ตฌํ
๊ธฐ๋ณธ์ ์ผ๋ก push์ pop ์ฐ์ฐ์ ๊ตฌํํด์ผ ํ๋ฉฐ, ์ถ๊ฐ์ ์ผ๋ก top, isEmpty, count ์ฐ์ฐ์ ๊ตฌํํ๊ฒ ์ต๋๋ค.
๋ฐฐ์ด ์์ฑ
// ์ ๋ค๋ฆญ์ผ๋ก ๋น ๋ฐฐ์ด ์์ฑ
private var datas: [T] = []
์ ๋ค๋ฆญ์ผ๋ก ๊ตฌํ๋ ๋น ๋ฐฐ์ด์ ์์ฑํฉ๋๋ค. ์ด ๋ฐฐ์ด์ Stack์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
๋ํ, ์ธ๋ถ์์ ์ง์ ์ ์ธ ์ ๊ทผ์ ๋ง๊ธฐ ์ํด private๋ก ์ ์ธํด์ค๋๋ค.
์ฝ์ (push) - O(1)
// ๋ฐ์ดํฐ ์ฝ์
(push)
mutating func push(_ data: T) {
    datas.append(data)
}
๋ฐฐ์ด์ ์ฝ์ (push) ๋ฉ์๋์์๋ append(_ newElement: Element) ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํฉ๋๋ค.
์ด๋ ๋ฐฐ์ด์ ๋์ ๋ฐ์ดํฐ๋ฅผ ๋ง๋ถ์ด๋ ๊ฒ์ผ๋ก, ๋๋ถ๋ถ์ ๊ฒฝ์ฐ์๋ O(1)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ต๋๋ค.
๋ค๋ง, ๋ฐฐ์ด์ ์ฉ๋(capacity)์ด ๋ถ์กฑํ์ฌ ์๋ก์ด ์ ์ฅ์๋ฅผ ํ ๋นํด์ผ ํ ๋๋ O(n)์ ์๊ฐ ๋ณต์ก๋๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
๋ฐฐ์ด์ ์ผ๋ฐ์ ์ผ๋ก ์ง์ ์ ๋ต์ ์ฌ์ฉํ์ฌ ์ ์ฅ ๊ณต๊ฐ์ ํ์ฅํฉ๋๋ค. ์ด๋ ํ์ฌ ์ ์ฅ ๊ณต๊ฐ์ 2๋ฐฐ, 2^2๋ฐฐ, 2^3๋ฐฐ...์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ฉ๋์ ๋๋ฆฝ๋๋ค.
๋ฐ๋ผ์ ๋๋ถ๋ถ์ ์ํฉ์์ ๋ฐฐ์ด์ append(_:) ๋ฉ์๋๋ ํ๊ท ์ ์ผ๋ก O(1)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๋ณด์ฅํ ์ ์์ต๋๋ค.
append(_:) | Apple Developer Documentation
์ญ์  (pop) - O(1)
// ๋ฐ์ดํฐ ์ญ์ (pop)
mutating func pop() -> T? {
   return datas.popLast()
}
Swift์์ ๋ฐฐ์ด์ ๋ง์ง๋ง ์์๋ฅผ ์ญ์ ํ๋ ๋ ๊ฐ์ง ๋ฉ์๋๋ก removeLast()์ popLast()๋ฅผ ์๊ฐํด๋ณผ ์ ์์ต๋๋ค.
removeLast()์ ๊ฒฝ์ฐ, ๋ฆฌํด ํ์ ์ด Self.Element์ด๊ธฐ ๋๋ฌธ์ ๋ฐฐ์ด์ด ๋น์ด์์ ๊ฒฝ์ฐ ์ฌ์ฉํ๋ฉด ๋ฐํ์ ์๋ฌ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ popLast()์ ๊ฒฝ์ฐ ๋ฆฌํด ํ์ ์ด Self.Element?์ผ๋ก ์ ์๋์ด ์์ด ๋น ๋ฐฐ์ด์์ ์ฌ์ฉํด๋ nil์ ๋ฆฌํดํ๋ฏ๋ก ์์ ํ๊ฒ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
๋ ๋ฉ์๋์ ์๊ฐ ๋ณต์ก๋๋ ๋ชจ๋ O(1)์ด๊ธฐ ๋๋ฌธ์ ์ฌ๊ธฐ์๋ popLast()๋ฅผ ์ฌ์ฉํ์ฌ ์ญ์ (pop) ๋ฉ์๋๋ฅผ ๊ตฌํํ์์ต๋๋ค.
removeLast() | Apple Developer Documentation
popLast() | Apple Developer Documentation
์กฐํ (count, isEmpty, top) - O(1)
// ๋ฐฐ์ด์ ๋ด๊ธด ๋ฐ์ดํฐ์ ๊ฐ์ ์กฐํ
var count: Int {
    return datas.count
}
// ์คํ์ด ๋น์ด์๋์ง ์ฌ๋ถ ์กฐํ
var isEmpty: Bool {
    return datas.isEmpty
}
// ๊ฐ์ฅ ์ต๊ทผ ๋ฐ์ดํฐ ์กฐํ
func top() -> T? {
    return datas.last
}
์คํ์ ๋ด๊ธด ๋ฐ์ดํฐ์ ๊ฐ์๋ฅผ ๋ํ๋ด๋ count์ ์คํ์ด ๋น์ด์๋์ง ์ฌ๋ถ๋ฅผ ๋ํ๋ด๋ isEmpty๋ Swift์ ๋ฐฐ์ด ํ์ ์์ ์ ๊ณตํ๋ count์ isEmpty ํ๋กํผํฐ๋ฅผ ํ์ฉํฉ๋๋ค.
count์ isEmpty ํ๋กํผํฐ๋ ์ผ๋ฐ์ ์ผ๋ก O(1)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง์ง๋ง, ์ฃผ์ํด์ผ ํ ์ ์ด ์์ต๋๋ค.
๋ง์ฝ, ํด๋น ์ปฌ๋ ์  ํ์ ์ด RandomAccessCollection ํ๋กํ ์ฝ์ ์ค์ํ์ง ์๋๋ค๋ฉด count์ ์๊ฐ ๋ณต์ก๋๋ O(n)์ด ๋ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, Dictionary์ Set ํ์ ์ RandomAccessCollection ํ๋กํ ์ฝ์ ์ค์ํ์ง ์์ count์ ์๊ฐ ๋ณต์ก๋๊ฐ O(n)์ ๋๋ค.
์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๋ ๋ฐฐ์ด์ RandomAccessCollection ํ๋กํ ์ฝ์ ์ค์ํ๋ฏ๋ก count๋ O(1)์ ๋๋ค.
(RandomAccessCollection์ ๊ฐ๋จํ๊ฒ ๋งํด์ ์ธ๋ฑ์ค๋ฅผ ํตํด ๋ฐฐ์ด์ ์์์ ์ ๊ทผํ ์ ์๊ฒ ํด์ฃผ๋ ํ๋กํ ์ฝ์ ๋๋ค! ์ธ๋ฑ์ค๋ฅผ ๊ด๋ฆฌํด์ฃผ๊ธฐ ๋๋ฌธ์ count๋ฅผ ๊ณ์ฐํ๋ ๊ฒ๋ ์ฝ๊ฒ ์ฃ ?!)
์คํ์ ๊ฐ์ฅ ์์ ์์ฌ ์๋ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๊ธฐ ์ํด top() ๋ฉ์๋๋ Swift์ ๋ฐฐ์ด ํ์ ์์ ์ ๊ณตํ๋ last ํ๋กํผํฐ๋ฅผ ํ์ฉํ๊ณ ,
์ด ๋ํ O(1)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋๋ค.
count | Apple Developer Documentation
isEmpty | Apple Developer Documentation
last | Apple Developer Documentation
์คํ์ ๊ตฌ์กฐ์ฒด๋ก ๊ตฌํํ๋ ์ด์
์คํ์ ๊ตณ์ด ๊ตฌ์กฐ์ฒด๋ก ๋ง๋ค์ด์ฃผ์ง ์์๋, ์๋์ฒ๋ผ ๋ฐฐ์ด๋ก๋ง ์คํ์์ ์๊ตฌํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ ์ ์์ต๋๋ค.
var stack: [Any] = [] 
stack.append(data)  // push
stack.popLast   // pop
stack.isEmpty   // isEmpty
stack.last      // peek
๊ทธ๋ฐ๋ฐ, ์ ์คํ์ ๊ตณ์ด ๊ตฌ์กฐ์ฒด๋ก ๊ตฌํํด์ผ ํ๋์ง ์๊ฐํด๋ด ์๋ค.
์คํ์์ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ์ฃผ๋ ๊ธฐ๋ฅ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ (push)ํ๊ณ ์ญ์ (pop)ํ๋ ๊ฒ์ ๋๋ค.
๊ทธ๋ฌ๋ ๋ฐฐ์ด ํ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ค ๋ณด๋ฉด ๋ด๋ถ ๊ฐ์ ์ค์๋ก ๋ค๋ฅธ ํจ์๋ฅผ ์ฌ์ฉํด ์ฐธ์กฐํ๊ฑฐ๋ ๋ณ๊ฒฝํ ์ ์๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
์ด๋ฐ ์ค์๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ์ฐ๋ฆฌ๋ ์ฒ์๋ถํฐ ์ ๊ณต๋๋ ์ฐ์ฐ์ ๋ช ํํ ์ง์ ํ๊ณ , ๋ด๋ถ ๊ฐ์ ์กฐ์ํ ๋์๋ ์ค๋ก์ง ๊ทธ ์ฐ์ฐ๋ง์ ์ฌ์ฉํ ์ ์๋๋ก ๊ตฌ์กฐ์ฒด๋ก ๋ง๋๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ด๋ฐ ์ค๊ณ๋ ์ฝ๋์ ์ ๋ขฐ์ฑ์ ํฅ์์ํค๊ณ ์ ์ง๋ณด์๋ฅผ ์ฉ์ดํ๊ฒ ๋ง๋ค์ด ์ค๋๋ค
(๋์ค์ ๋ฐฐ์ธ Queue์ Dequeue๋ ์ด์ ๋น์ทํ ์๋ฆฌ๋ก ๊ตฌ์กฐ์ฒด๋ก ๊ตฌํํฉ๋๋ค.)
๊ทธ๋ผ์๋ ํ ๊ฐ์ง ์๋ฌธ์ด ์๊ธธ ์ ์์ต๋๋ค.
'isEmpty๋ count๋ ๋นผ์ผ ๋๋ ๊ฑฐ ์๋์ผ?'๋ผ๋ ์๋ฌธ์ด ์๊ธธ ์ ์์ต๋๋ค.
์ฌ์ค, ์คํ์ ๊ธฐ๋ณธ ๊ฐ๋ ์๋ ์์ด์ผ ํ๋ ๊ธฐ๋ฅ์ด ๋ง์ต๋๋ค.
ํ์ง๋ง, ์ด๋ฌํ ๊ธฐ๋ฅ๋ค์ ์ฌ์ฉ์์ ํธ์๋ฅผ ์ํด ์ถ๊ฐ๋ ์ฐ์ฐ์ ๋๋ค.
์ด๋ฌํ ํธ์์ฑ์ ์ ๊ณตํ๋ ์ฐ์ฐ์ ๋ฐ์ดํฐ๋ฅผ ํผ์ํ์ง ์์ผ๋ฉด์๋ ์คํ์ ํต์ฌ ๋ชฉ์ ์ ๋ฒ์ด๋์ง ์๋ ์ ์์ ์ถ๊ฐ๋์ด์ผ ํฉ๋๋ค.
Swift ์ ์ฒด ์ฝ๋
struct Stack<T> {
    // ์ ๋ค๋ฆญ์ผ๋ก ๋น ๋ฐฐ์ด ์์ฑ
    private var datas: [T] = []
    
    // ๋ฐฐ์ด์ ๋ด๊ธด ๋ฐ์ดํฐ์ ๊ฐ์
    var count: Int {
        return datas.count
    }
    
    // ์คํ์ด ๋น์ด์๋์ง ์ฌ๋ถ
    var isEmpty: Bool {
        return datas.isEmpty
    }
    
    // ๋ฐ์ดํฐ ์ฝ์
(push)
    mutating func push(_ data: T) {
        datas.append(data)
    }
    
    // ๋ฐ์ดํฐ ์ญ์ (pop)
    mutating func pop() -> T? {
       return datas.popLast()
    }
    
    // ๊ฐ์ฅ ์ต๊ทผ ๋ฐ์ดํฐ ์กฐํ
    func top() -> T? {
        return datas.last
    }
    
}
๋ง๋ฌด๋ฆฌ
์ ๋ฆฌํด์ ์ฌ๋ฆฌ๊ณ ์ถ์ ๋ด์ฉ์ด ํ ๋ ๊ฐ๊ฐ ์๋๋ค์..
๊ณต๋ถํ ๊ฒ๋ค์ ๋ค ์ฌ๋ฆฌ๊ณ ์ถ์ง๋ง ๊ธ๋ก ์ ๋ฆฌํ๋ ๊ฒ๋ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ ค ์ข ํ๋ค์ด์. ๐ญ
๊ทธ๋๋, ์ด์ฌํ ๊ณต๋ถํ๊ณ ๊ธ์ ์ ์ ๋ฆฌํด์ ๊พธ์คํ ์ฌ๋ฆฌ๊ฒ ์ต๋๋ค!
(๋ง์ด ์ฌ๋ฆฌ๋ฉด ์ธ์ ๊ฐ๋ ๋๊ตฐ๊ฐ๊ฐ ๋ด์ฃผ๊ฒ ์ฃ ..)
์ฌ์ค, ๊ธ์ ์์ฑํ๋ ๊ณผ์ ์์ ์๋ชป๋ ๋ด์ฉ์ ๋ฐฉ์งํ๊ธฐ ์ํด ๋ ธ๋ ฅํ๊ณ ์์ด์.
์ ํํ ๋ด์ฉ์ ์ ๋ฌํ๊ธฐ ์ํด ํ ๋ฒ ๋ ์ฐพ์๋ณด๋ ๊ณผ์ ์์ ๋ง์ ๊ณต๋ถ๊ฐ ๋๊ณ ์์ด์,
์ด ๋ถ๋ถ์ด ์ ์๊ฒ ํฐ ๋์์ด ๋๊ณ ์์ต๋๋ค.๐ค
์๋ชป๋ ๋ด์ฉ์ด๋ ๊ถ๊ธํ์ ์ ์ด ์๋ค๋ฉด ๋๊ธ ๋จ๊ฒจ์ฃผ์ธ์. ๐ค
์ฝ์ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
๐ ์ฐธ๊ณ ์๋ฃ
ํ๊ตญ์ธ๋ ์ ์ฐฌ์ ๊ต์๋์ Data Structures with Python ๊ฐ์
https://babbab2.tistory.com/85
'Computer > Data Structure' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ํด์ ํ ์ด๋ธ(Hash Table)์ ๋์๊ด. (5) | 2024.03.08 | 
|---|---|
| [Swift] ์ฐ๊ฒฐ ๋ฆฌ์คํธ(Linked List)๋ ์งํ์ฒ . (feat. ์ค๊ตญ์ด์ฐจ) (5) | 2024.03.01 | 
| [Swift] ํ(Queue)๋ ์ ์ฐฉ์. (1) | 2024.01.25 | 
| ์๋ฃ ๊ตฌ์กฐ(Data Structure), ์๊ณ ๋ฆฌ์ฆ(Algorithms) ๊ทธ๊ฒ ๋ญ์ผ... ? (0) | 2024.01.16 | 
- C++
 - 2024๋  ๋ชฉํ
 - ๋ฒ์ฉ๊ณ ์ ์๋ณ
 - containerView
 - Swift
 - ๊ดํธ์ ๊ฐ
 - ์ ํ์์นด๋ฐ๋ฏธ
 - remainder
 - 2023๋  ํ๊ณ
 - Container View Controller
 - ์์ด ๋ด์ค
 - BOJ
 - pageViewController
 - ํ๊ณ
 - ์์ด ๊ณต๋ถ
 - ์๋ฐฉํฅ ์ฐ๊ฒฐ ๋ฆฌ์คํธ
 - ํ
 - ์๋ฃ ๊ตฌ์กฐ
 - Anyobject
 - ์คํ
 - root view controller
 - ์ํํธ์คํฌ
 - ๊ท๋๋ผ๋ฏธ ์์ด
 - ๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ
 - 24๋  ํ๊ณ
 - ๊ท๋๋ผ๋ฏธ ์์ด
 - tipkit
 - 10808
 - ๊ณต๊ฐ ๋ณต์ก๋
 - ๊ฐ๋ฐ์
 
- Total
 
- Today
 
- Yesterday