[kotlin] 배열을 스택(Stack) 자료구조로 사용하는 방법은?

배열은 많은 개념을 구현하는 데에 유용한 자료구조입니다. 그 중에서도 스택(Stack)은 데이터를 후입선출(Last-In, First-Out) 방식으로 저장하고 접근하는 자료구조입니다. Kotlin에서 배열을 스택으로 사용하는 방법에 대해 알아보겠습니다.

먼저, 배열을 선언하고 초기화합니다. 예를 들어, 정수를 저장하는 스택을 만들기 위해 다음과 같이 배열을 선언할 수 있습니다.

val stack = IntArray(size)

여기서 size는 스택의 크기를 의미합니다. 이제 스택의 기능을 구현해보겠습니다.

  1. push: 스택에 값을 추가하는 기능입니다. 이를 위해 배열의 인덱스를 활용하여 값을 저장합니다. 예를 들어, 정수 value를 스택에 추가하는 push 함수는 다음과 같이 구현할 수 있습니다.

    fun push(value: Int) {
        stack[topIndex++] = value
    }
    

    여기서 topIndex는 스택의 가장 위에 있는 요소를 가리키는 인덱스입니다.

  2. pop: 스택에서 값을 제거하고 반환하는 기능입니다. 마찬가지로 인덱스를 활용하여 값을 제거합니다. 예를 들어, 스택의 가장 위에 있는 값을 제거하고 반환하는 pop 함수는 다음과 같이 구현할 수 있습니다.

    fun pop(): Int {
        if (topIndex == 0) {
            throw EmptyStackException("Stack is empty")
        }
        return stack[--topIndex]
    }
    
  3. peek: 스택의 가장 위에 있는 값을 반환하는 기능입니다. 값을 제거하지 않고 그대로 확인하기 위해 사용합니다. 예를 들어, 스택의 가장 위에 있는 값을 반환하는 peek 함수는 다음과 같이 구현할 수 있습니다.

    fun peek(): Int {
        if (topIndex == 0) {
            throw EmptyStackException("Stack is empty")
        }
        return stack[topIndex - 1]
    }
    

위에서 구현한 push, pop, peek 함수를 사용하여 배열을 스택으로 활용할 수 있습니다. 다음은 간단한 예제입니다.

fun main() {
    push(1)
    push(2)
    push(3)
    
    println(pop()) // 3 출력
    println(peek()) // 2 출력
    println(pop()) // 2 출력
}

이처럼 Kotlin에서 배열을 스택으로 사용하는 방법을 소개했습니다. 배열을 활용하여 더 다양한 자료구조를 구현할 수도 있으니 참고해보세요.