1552 words
8 minutes
Stack(스택)에 대해서 알아보기

안녕하세요, 여러분! 오늘은 알고리즘과 자료구조의 기초 중 하나인 ‘스택(Stack)‘에 대해 알아보려고 합니다. 스택이라는 말을 처음 들어보시는 분들도 계실 텐데요, 걱정 마세요. 아주 쉽고 재미있게 설명해 드리겠습니다.

스택이란 무엇일까요? 간단히 말해, 스택은 데이터를 저장하고 관리하는 방법 중 하나입니다. 그런데 이 스택이라는 녀석, 조금 특별한 규칙을 가지고 있어요. 바로 ‘후입선출(Last-In-First-Out, LIFO)‘이라는 규칙인데요, 이게 무슨 뜻인지 곧 자세히 알아보겠습니다.

스택의 동작 원리를 이해하기 위해, 실생활의 예시를 한번 들어볼까요? 여러분, 책상 위에 쌓여있는 책들을 想像해 보세요. 책을 하나씩 쌓아 올리면, 가장 나중에 올려놓은 책이 맨 위에 있게 되겠죠? 그리고 책을 다시 치울 때는 맨 위에 있는 책부터 치우게 됩니다. 이것이 바로 스택의 기본 원리입니다!

이 개념을 좀 더 시각적으로 표현해 볼까요?

스택PushPop요소 1요소 2요소 3

이 그림에서 볼 수 있듯이, 스택은 마치 상자를 쌓아 올리는 것과 같습니다. 새로운 요소를 추가할 때는 맨 위에 쌓고 (Push 연산), 요소를 제거할 때는 맨 위에서부터 꺼냅니다 (Pop 연산).

이제 스택의 주요 연산들에 대해 더 자세히 알아볼까요?

  1. Push (삽입) 연산 Push는 스택에 새로운 요소를 추가하는 연산입니다. 앞서 말씀드린 것처럼, 새로운 요소는 항상 스택의 맨 위에 추가됩니다. 책상 위에 책을 하나 올려놓는 것을 想像해 보세요. 그게 바로 Push 연산입니다!

  2. Pop (제거) 연산 Pop은 스택에서 요소를 제거하는 연산입니다. 스택의 가장 위에 있는 요소를 제거하고 반환합니다. 책상 위에 쌓인 책 중에서 맨 위의 책을 집어 드는 것과 같죠.

  3. Peek (or Top) 연산 Peek은 스택의 맨 위에 있는 요소를 확인하는 연산입니다. Pop과 달리 요소를 제거하지 않고 단순히 어떤 요소가 맨 위에 있는지만 살펴봅니다. 책상 위 책 더미의 맨 위 책 제목만 살짝 들여다보는 것과 비슷해요.

  4. isEmpty 연산 isEmpty는 스택이 비어있는지 확인하는 연산입니다. 스택에 요소가 하나도 없으면 true를, 그렇지 않으면 false를 반환합니다. 책상 위에 책이 한 권도 없는지 확인하는 것과 같습니다.

이제 파이썬으로 스택을 어떻게 구현하는지 살펴볼까요? 파이썬에서는 리스트를 사용해 간단히 스택을 구현할 수 있습니다.

stack = []

def push(item):
    stack.append(item)

def pop():
    if not is_empty():
        return stack.pop()

def peek():
    if not is_empty():
        return stack[-1]

def is_empty():
    return len(stack) == 0

def size():
    return len(stack)

# 사용 예시
push(1)
push(2)
print(pop())  # 출력: 2

이 코드에서 push 메서드는 리스트의 append 메서드를 사용해 요소를 추가하고, pop 메서드는 리스트의 pop 메서드를 사용해 마지막 요소를 제거하고 반환합니다. peek 메서드는 마지막 요소를 반환하지만 제거하지는 않습니다.

스택은 실제로 많은 곳에서 사용됩니다. 몇 가지 예를 들어볼까요?

  1. 웹 브라우저의 뒤로 가기 기능: 방문한 페이지들이 스택에 쌓이고, 뒤로 가기를 누르면 가장 최근에 방문한 페이지로 돌아갑니다.

  2. 문서 편집기의 실행 취소 기능: 수행한 작업들이 스택에 쌓이고, 실행 취소를 하면 가장 최근에 수행한 작업부터 취소됩니다.

  3. 함수 호출 관리: 프로그램에서 함수가 호출될 때마다 스택에 쌓이고, 함수 실행이 끝나면 스택에서 제거됩니다.

  4. 괄호 짝 맞추기: 프로그래밍 언어에서 괄호의 짝이 맞는지 확인할 때 스택을 사용합니다.

여러분, 이제 스택에 대해 어느 정도 이해가 되셨나요? 처음에는 조금 낯설게 느껴질 수 있지만, 실제로 우리 일상 생활에서도 자주 사용되는 개념이랍니다.

스택을 더 잘 이해하기 위해 직접 실습해보는 것은 어떨까요? 예를 들어, 간단한 계산기 프로그램을 만들어보세요. 숫자와 연산자를 입력받아 스택에 저장하고, 계산 결과를 출력하는 프로그램을 만들어보면 스택의 동작 원리를 더 깊이 이해할 수 있을 거예요.

스택은 단순해 보이지만 매우 자주쓰이는 자료구조입니다. 이를 잘 이해하고 활용하면 복잡한 문제도 효율적으로 해결할 수 있게 됩니다. 앞으로 알고리즘 문제를 풀거나 프로그램을 개발할 때 스택을 활용할 수 있는 상황이 없는지 한 번씩 생각해보세요. 여러분의 문제 해결 능력이 한층 더 성장할 거예요!

Stack(스택)에 대해서 알아보기
https://kimjinwoo.me/posts/20240722-algorithm-9/
Author
Jinwoo Kim
Published at
2024-07-22