파이썬 스택(Stack) 자료구조 개요

스택(Stack)은 후입선출(LIFO, Last-In-First-Out) 방식으로 작동하는 자료구조입니다. 즉, 가장 최근에 추가된 요소가 가장 먼저 제거됩니다. 파이썬에서는 리스트(list)를 이용하여 스택을 쉽게 구현할 수 있으며, append() 메서드를 이용해 요소를 추가하고 pop() 메서드를 이용해 요소를 제거합니다.

예를 들어:

stack = []
stack.append(1)  # 스택에 1 추가
stack.append(2)  # 스택에 2 추가
stack.pop()      # 마지막으로 추가한 2 제거

이 코드에서 stack.pop()을 실행하면 2가 제거되고, 스택에는 [1]만 남습니다.

스택의 실무 활용 예시

스택 자료구조는 다양한 실무 분야에서 활용됩니다. 몇 가지 대표적인 예시는 다음과 같습니다.

1. 웹 브라우저 뒤로가기 기능

  • 브라우저에서 사용자가 여러 페이지를 이동할 때 방문한 페이지들을 스택에 저장해둡니다.
  • "뒤로가기" 버튼을 누를 때마다 마지막에 방문한 페이지가 스택에서 제거되며, 이전 페이지로 돌아가게 됩니다.

2. 재귀 함수 호출 관리

  • 재귀 함수 호출 과정에서도 스택이 사용됩니다.
  • 파이썬은 내부적으로 호출된 함수들을 스택에 저장하여 순차적으로 실행하고 복귀합니다.

3. 문자열 역순 출력

  • 문자열을 거꾸로 출력하는 작업에서도 스택을 이용할 수 있습니다.
  • 문자열의 각 문자를 스택에 하나씩 넣고, 스택에서 꺼내면 문자의 순서가 뒤집히게 됩니다.

4. 괄호의 유효성 검사

  • 코드에서 괄호가 올바르게 닫혔는지 확인하는 데 스택이 사용됩니다.
  • 여는 괄호를 스택에 추가하고, 닫는 괄호가 나오면 스택에서 여는 괄호를 제거하여 올바른 쌍을 이루는지 확인하는 방식입니다.

예를 들어 괄호 유효성을 체크하는 간단한 코드:

def is_valid_parentheses(s):
    stack = []
    mapping = {')': '(', '}': '{', ']': '['}
    for char in s:
        if char in mapping:
            top_element = stack.pop() if stack else '#'
            if mapping[char] != top_element:
                return False
        else:
            stack.append(char)
    return not stack

print(is_valid_parentheses("()[]{}"))  # True
print(is_valid_parentheses("(]"))      # False

위 코드에서 괄호가 올바르게 닫히면 True를 반환하고, 그렇지 않으면 False를 반환합니다.

5. 역폴란드 표기법 계산기

  • 수식 계산 시에도 스택을 활용할 수 있습니다.
  • 특히 역폴란드 표기법에서는 연산자 뒤에 피연산자가 오는 형태이므로, 스택을 이용해 피연산자를 쌓아가며 계산합니다.

이와 같이 스택은 데이터의 순서와 관계된 문제를 해결하는 데 매우 유용하게 사용됩니다.

+ Recent posts