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를 반환.
'코틀린[Kotlin]' 카테고리의 다른 글
코틀린으로 크롤링하기(Jsoup) (0) | 2022.07.20 |
---|---|
코틀린(Kotlin)에서 큐(Queue) 사용하기 (1) | 2022.07.08 |
코틀린에서 가변인자(vararg) 사용하기 (0) | 2022.07.06 |
코틀린 하나 혹은 순차적인 기준을 가지고 정렬하기(sortBy, sortedBy, sortWith, sortedWith, compareBy) (0) | 2022.06.23 |
코틀린[Kotlin] 컬렉션 정리 - 최대 및 최소 / 합계 등(About the Collections in Kotlin -Max or Min / Sum etc..) (0) | 2022.05.13 |
최근댓글