파이썬 스택(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. 역폴란드 표기법 계산기
- 수식 계산 시에도 스택을 활용할 수 있습니다.
- 특히 역폴란드 표기법에서는 연산자 뒤에 피연산자가 오는 형태이므로, 스택을 이용해 피연산자를 쌓아가며 계산합니다.
이와 같이 스택은 데이터의 순서와 관계된 문제를 해결하는 데 매우 유용하게 사용됩니다.
'실용적인 자료구조' 카테고리의 다른 글
[실용적인 자료구조] RPG 게임 이벤트 구현을 위한 자료구조 (2) | 2024.10.27 |
---|---|
[실용적인 자료구조] 게임용 명령어 풀(Command Pool) 예제 (0) | 2024.10.27 |
[실용적인 자료구조] 메타클래스 설명 및 예제코드 (2) | 2024.10.24 |
[실용적인 자료구조] 리스트 상속 데이터 직렬화 클래스 (SerializableList) (2) | 2024.10.22 |
[실용적인 자료구조] Python의 'object' 클래스 2 (2) | 2024.10.20 |