[메이드 인 스위프트] 자료구조 - 스택 Stack 구현해보기

2024. 12. 25. 00:39·🖥️ Computer Science/Data Structure

개요

이번에 알고리즘 공부를 할 참이었는데,

자료구조도 다시 공부하고 Swift로는 구현을 안 해본 거 같아서

Swift로 구현해보고 이를 함수형을 지키며 불변성 & 순수 함수로 구현해보려 한다.

 

그냥 문뜩 Swift로 함수형 프로그래밍을 하고 싶어졌다.

지난 번 Linked List를 함수형으로 만들었을 때 함수형으로 해볼 기회가 있었는데,

거기서 매력을 느껴서 그런 것 같다.

 


코드 구현

public struct KJStack<Element> {
    private let stack: [Element]

    public var count: Int { stack.count }
    public var isEmpty: Bool { stack.isEmpty }
    public var peek: Element? { stack.last }

    public init(_ stack: [Element] = []) {
        self.stack = stack
    }

    public func push(_ value: Element) -> KJStack {
        return KJStack(stack + [value])
    }

    public func pop() -> KJStack {
        guard !stack.isEmpty else { return self }
        return KJStack(Array(stack.dropLast()))
    }
    
    public func popLast() -> Element? {
        return stack.last
    }
}

// MARK: Equatable
extension KJStack: Equatable where Element: Equatable {
    public static func == (lhs: KJStack<Element>, rhs: KJStack<Element>) -> Bool {
        lhs.stack == rhs.stack
    }
}

// MARK: CustomStringConvertible
extension KJStack: CustomStringConvertible {
    public var description: String {
        "Current KJStack: \(stack)"
    }
}

 

실행 코드

var stack = KJStack<Int>()
print(stack) // KJStack: []

stack = stack.push(5)
print(stack) // KJStack: [5]

stack = stack.push(10)
print(stack) // KJStack: [5, 10]

print("Peek Value: \(stack.peek ?? -1)") // Peek Value: 10
print("Current Stack Count: \(stack.count)") // Current Stack Count: 2

let lastValue = stack.popLast()
print("Popped Value: \(lastValue ?? -1)") // Popped Value: 10

stack = stack.pop()
print(stack) // KJStack: [5]

// Equatable 테스트
let stack1 = KJStack([1, 2, 3])
let stack2 = KJStack([1, 2, 3])

print(stack1 == stack2) // true

 

구현 후 느낀점

위와 같이 작성을 해봤는데, 지금 구조는 메모리 관점에서는 많이 비효율적이다.

아무래도 함수형의 단점이기도 하다고 생각한다.

 

지금 push든 pop이든 전체 복사를 하고 새로 객체를 반환해주는데,

그래서 그런지 백준 문제를 위 Stack으로 풀면 시간초과가 발생한다.

저작자표시 (새창열림)

'🖥️ Computer Science > Data Structure' 카테고리의 다른 글

[메이드 인 스위프트] 자료구조 - 큐 Queue 구현해보기  (0) 2024.12.27
그래프 응용(최소신장트리), Prim 알고리즘 C언어 구현  (0) 2023.05.27
그래프(Graph)의 개념과 C언어로 구현  (0) 2023.05.27
'🖥️ Computer Science/Data Structure' 카테고리의 다른 글
  • [메이드 인 스위프트] 자료구조 - 큐 Queue 구현해보기
  • 그래프 응용(최소신장트리), Prim 알고리즘 C언어 구현
  • 그래프(Graph)의 개념과 C언어로 구현
kyxxn
kyxxn
컴퓨터공학을 좋아하는 대학생의 공부 일기
  • kyxxn
    컴공 학부생의 공부 일기
    kyxxn
  • 전체
    오늘
    어제
    • 분류 전체보기 (156)
      • 📱 iOS (64)
        • Xcode (10)
        • Swift (17)
        • Swift Concurrency (12)
        • UIKit (21)
        • SwiftUI (0)
      • 🖥️ Computer Science (57)
        • 🏛️ Software Architecture Pa.. (2)
        • 👨🏻‍🎨 Design Pattern (3)
        • Data Structure (4)
        • Algorithm (10)
        • Computer Architecture (4)
        • Operating System (19)
        • Network (15)
      • ✍🏻 회고록 (9)
      • 🎸 기타 (25)
        • 해커톤 (1)
        • git (6)
        • 세미나 (1)
        • 책을 읽고 (1)
        • AOS, Kotlin (6)
        • Reinforcement Learning (9)
  • 블로그 메뉴

    • 링크

      • 깃허브
      • 일상 블로그
    • 공지사항

    • 인기 글

    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.0
    kyxxn
    [메이드 인 스위프트] 자료구조 - 스택 Stack 구현해보기
    상단으로

    티스토리툴바