본문 바로가기
Computer Science/Data Structure

[DataStructure/Kotlin] pop과 peak의 차이점: 스택의 두 가지 주요 기능

by quessr 2025. 1. 17.

 

스택(Stack)은 데이터를 후입선출(LIFO, Last In First Out) 방식으로 저장하는 자료 구조입니다. 스택에서 자주 사용되는 두 가지 주요 연산은 pop과 peak입니다. 이 두 연산은 비슷하게 보이지만, 의미와 사용 목적에서 분명한 차이가 있습니다.

이를 이해하기 쉽게 정리 해 보겠습니다.

 


1. pop과 peak의 정의

  • pop:
    스택의 가장 위에 있는 요소를 제거하면서 반환합니다.
    스택의 상태를 변경하며, 크기가 줄어듭니다.
  • peak:
    스택의 가장 위에 있는 요소를 그대로 반환합니다.
    스택의 상태를 변경하지 않습니다. 단순히 데이터를 확인하는 용도로 사용됩니다.

 

2. 코틀린 구현 예제

val stack = mutableListOf<Int>()

fun push(data: Int) {
    stack.add(data) // 스택에 데이터 추가
}

fun pop(): Int {
    return if (stack.isNotEmpty()) stack.removeAt(stack.size - 1) else -1
}

fun peak(): Int {
    return if (stack.isNotEmpty()) stack.last() else -1
}

 

3. pop과 peak의 동작 비교

예를 들어, 스택의 상태가 [1, 2, 3]일 때:

1) pop() 호출:

  • 반환값: 3 (스택의 마지막 요소)
  • 새로운 스택 상태: [1, 2] (요소가 제거됨)

2) peak() 호출:

  • 반환값: 3 (스택의 마지막 요소)
  • 새로운 스택 상태: [1, 2, 3] (변경 없음)

 

4. 사용 사례

  • pop의 사용 예:
    데이터를 꺼내어 계산하거나 사용해야 할 때.
val result = pop() // 데이터를 꺼내서 계산

 

  • peak의 사용 예:
    데이터를 단순히 확인하거나 조건을 판단할 때.
if (peak() == 10) {
    println("The top element is 10.")
}

 

5. 예제 프로그램

아래는 pop과 peak의 차이를 보여주는 예제입니다:

fun main() {
    push(10)
    push(20)
    push(30)

    println("Top element: ${top()}") // 출력: 30 (스택 상태는 변경되지 않음)
    println("Popped element: ${pop()}") // 출력: 30 (스택 상태에서 30이 제거됨)
    println("New top element: ${peak()}") // 출력: 20 (스택 상태 변경됨)
}

 

출력 결과:

Top element: 30
Popped element: 30
New peak element: 20

 

6. pop과 peak의 차이점 정리

 

구분 pop peak
역할 스택의 가장 위 요소를 제거하며 반환 스택의 가장 위 요소를 그대로 반환
상태 변경 스택의 상태를 변경 (요소 제거) 스택의 상태를 변경하지 않음
용도 데이터를 사용하고 제거할 때 데이터를 확인만 할 때

 

7. 결론

  • pop과 peak은 비슷해 보이지만, 서로 다른 역할을 수행합니다.
  • pop은 스택의 상태를 변경하고, 데이터를 실제로 꺼내서 사용해야 할 때 유용합니다.
  • peak은 스택의 상태를 유지하며, 단순히 데이터를 확인하거나 조건에 따라 판단해야 할 때 유용합니다.
반응형