스택(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은 스택의 상태를 유지하며, 단순히 데이터를 확인하거나 조건에 따라 판단해야 할 때 유용합니다.
반응형