반응형

Stack이란?

Stack이라는 단어는 쌓이다, 쌓아서 채우다 라는 사전적 의미를 가지고 있습니다.

사전적 의미대로 Stack이라는 자료구조는 입력받은 값들을 순차적으로 쌓아서 저장합니다. 
ex) 빈 stack에 5, 3, 2, 1 순서대로 삽입하면 꺼낼 때는 1, 2, 3, 5 순서로 뽑히게 됩니다.

이러한 특성을 가진 스택 자료구조는 후입선출(Last In First Out - LIFO) 즉, 나중에 들어온 것이 먼저 나가게 되는 구조를 가집니다.

일상생활에서 스택 자료구조와 비슷한 경우를 생각해보면 빈 상자 혹은 책상에 책을 차곡차곡 쌓는 상태와 동일합니다. 

 

코틀린에서 Stack 사용하기

코틀린 자체적으로는 Stack이 구현되어있지 않기 때문에 직접 구현하거나 java에 있는 Stack을 사용해야 합니다. 

java에 있는 Stack을 사용하기 위해선 java.util.* (혹은 java.util.Stack)을 import 해야합니다.

import java.util.*

Stack의 기능들

import java.util.*

fun main() {

    val stack = Stack<Int>() // stack = []

    // push
    stack.push(1) // stack = [1]
    stack.push(2) // stack = [1,2]
    stack.push(3) // stack = [1,2,3]
    stack.push(4) // stack = [1,2,3,4]

    // peek
    println(stack.peek()) // 4 출력 - stack = [1,2,3,4]

    // size
    println(stack.size) // 4 출력 - stack = [1,2,3,4]

    // pop
    println(stack.pop()) // 4 출력 - stack = [1,2,3]

    // size
    println(stack.size) // 3 출력 - stack = [1,2,3]

    // search
    println(stack.search(1)) // 3 출력 - stack = [1,2,3]
    println(stack.search(100)) // -1 출력 - stack = [1,2,3]

    // isEmpty or isNotEmpty
    println(stack.isEmpty()) // false 출력 - stack = [1,2,3]
    println(stack.isNotEmpty()) // true 출력 - stack = [1,2,3]

    // 스택이 빌 때 까지 모든 값 pop
    while(stack.isNotEmpty()){
        println(stack.pop())
    }
    // 3 출력 - stack = [1,2]
    // 2 출력 - stack = [1]
    // 1 출력 - stack = []
}

Stack 선언

Stack은 Stack<Int>()와 같은 형태로 선언하여 사용할 수 있습니다. < > 안에는 스택의 원소로 들어갈 자료형들을 명시해줍니다.

Stack 값 삽입

Stack은 push()를 사용하여 값을 삽입할 수 있습니다.

맨 위에 값을 삽입하므로 O(1)입니다.

Stack 마지막 값 확인

Stack은 peek()을 사용하여 현재 스택의 마지막 값을 확인할 수 있습니다.

마지막 값만 확인하면 되므로 O(1) 입니다.

Stack이 비어있을 때 peek()을 사용하면 아래와 같은 에러가 발생합니다.

Exception in thread "main" java.util.EmptyStackException

Stack 크기 확인

Stack은 size()를 사용하여 현재 스택의 크기(원소의 개수)를 확인할 수 있습니다.

Stack 마지막 값 확인 및 삭제

Stack은 pop()을 사용하여 현재 스택의 마지막 값을 확인 및 삭제할 수 있습니다.

마지막 값만 삭제하면 되므로 O(1) 입니다.

peek()은 값을 반환만 하고, pop()은 값을 반환하고 삭제해줍니다.

peek()과 마찬가지로 비어있을 때 사용하면 아래와 같은 에러가 발생합니다.

Exception in thread "main" java.util.EmptyStackException

Stack 원소 찾기

Stack은 search를 사용하여 특정 원소를 찾아보고 해당 원소가 스택에 있다면 몇 번째로 나갈 수 있는지를 반환해줍니다.

만약 원소가 존재하지 않는다면 -1을 반환해줍니다.

Stack이 비었는지 확인

Stack은 isEmpty(), itNotEmpty()를 이용하여 현재 스택이 비었는지, 원소가 존재하는지 확인할 수 있습니다.

isEmpty()는 Stack이 비었을 경우 true를 반환, 그렇지 않다면 false를 반환.

isNotEmpty()는 Stack이 비었을 경우 false를 반환, 그렇지 않다면 true를 반환.

 

 

 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기