자료구조 선형구조 스택(Stack) 개념, 작동원리, 실생활 예시
데이터 구조는 컴퓨터 과학에서 데이터를 효율적으로 저장, 관리, 처리하기 위한 구조의 하나입니다. 이번 글에서는 데이터 구조의 기초 중 하나인 선형 데이터 구조에 대해 알아보겠습니다. 특히, 선형 구조 중 스택(Stack)에 초점을 맞추어 그 개념과 작동 원리, 실생활 예시를 통해 이해를 돕고자 합니다. 데이터 구조를 처음 접하는 분들도 쉽게 이해할 수 있도록 기본적인 개념부터 차근차근 설명하겠습니다.
스택(Stack)에 대해
스택(Stack)의 기본 개념
스택은 데이터를 일시적으로 저장하기 위한 선형 자료구조입니다. 이 구조는 '후입선출'(LIFO, Last In First Out)의 원리로 동작합니다. 즉, 가장 마지막에 쌓은 데이터를 가장 먼저 꺼내 사용하는 구조입니다.
스택의 작동 원리
- 푸시(Push): 스택에 데이터를 추가하는 작업입니다.
- 팝(Pop): 스택에서 데이터를 꺼내는 작업입니다. 가장 마지막에 추가된 데이터가 꺼내집니다.
- 피크(Peek): 스택의 가장 위에 있는 데이터를 조회하는 작업입니다. 데이터를 꺼내지는 않습니다.
이러한 작동 원리는 실생활에서 접시를 쌓아두고 사용하는 것에 비유할 수 있습니다. 새로운 접시는 항상 맨 위에 쌓이고, 사용할 때는 맨 위의 접시부터 꺼내 사용합니다.
스택의 실생활 예시
예시1. 쌓인 접시
stack = [] # 비어있는 스택 생성
# 스택에 데이터(접시) 추가
stack.append('접시1')
stack.append('접시2')
stack.append('접시3')
# 스택의 가장 위 데이터 조회
top_dish = stack[-1] # '접시3'
# 스택에서 데이터(접시) 제거
stack.pop() # '접시3' 제거
위 코드 예시처럼, 스택을 이용하여 데이터를 추가하고 제거하는 과정을 프로그래밍으로 구현할 수 있습니다. 이는 데이터의 관리와 접근을 효율적으로 할 수 있게 도와줍니다.
예시2. 괄호 검사
프로그래밍에서 괄호는 연산자의 우선 순위를 정하는 데 사용되며, 여는 괄호와 닫는 괄호의 짝이 맞아야 합니다. 이런 괄호의 짝이 올바르게 되어 있는지 확인하는 것은 프로그래밍에서 흔히 마주치는 문제 중 하나입니다. 스택을 이용하면 이 문제를 매우 효율적으로 해결할 수 있습니다.
괄호 검사 알고리즘
1) 입력된 문자열을 순회하면서 각 문자에 대해 다음을 수행합니다.
- 여는 괄호((, {, [)를 만나면 스택에 푸시합니다.
- 닫는 괄호(), }, ])를 만나면 스택이 비어있는지 확인하고, 스택의 맨 위에 있는 여는 괄호와 짝이 맞는지 확인합니다.
- 스택이 비어있거나 짝이 맞지 않으면 괄호의 짝이 올바르지 않음을 의미합니다.
2) 문자열의 순회가 끝나면 스택이 비어있어야 합니다. 스택에 남아있는 괄호가 있다면 괄호의 짝이 맞지 않는 것입니다.
괄호 검사 코드
def isValid(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(isValid("()[]{}")) # True 출력
print(isValid("(]")) # False 출력
print(isValid("([)]")) # False 출력
print(isValid("{[]}")) # True 출력
이 코드는 주어진 문자열의 괄호가 올바르게 짝지어져 있는지 검사합니다. 스택의 LIFO 특성을 활용하여 여는 괄호를 만날 때마다 스택에 푸시하고, 닫는 괄호를 만날 때는 스택에서 팝하여 짝이 맞는지 확인합니다.
스택은 그 간단한 원리에도 불구하고 프로그래밍 언어의 함수 호출, 실행 취소 기능, 웹 브라우저의 방문 기록 관리 등 다양한 분야에서 활용됩니다. 앞으로도 스택의 원리를 기반으로 한 다양한 알고리즘과 기술들이 개발될 것으로 예상됩니다. 이러한 기본적인 데이터 구조의 이해는 향후 더 복잡한 문제를 해결하는 데 있어 중요한 기초가 될 것입니다.
끝으로
이번 글에서는 스택이라는 선형 데이터 구조에 대해 알아보았습니다. 스택의 개념과 작동 원리, 그리고 간단한 예시를 통해 이해를 돕고자 했습니다. 스택은 프로그래밍에서 매우 유용하게 사용되는 기본적인 자료구조 중 하나이므로, 이를 잘 이해하고 활용한다면 보다 효율적인 코드 작성이 가능할 것입니다. 데이터 구조를 학습하는 여정이 여러분에게 유익한 시간이 되기를 바랍니다.
▼ 자료구조와 관련된 다른 글 ▼
'Programming & Platform > 자료구조' 카테고리의 다른 글
OSI 7계층 모델 쉽게 이해하기 (1) | 2024.04.19 |
---|---|
선형구조 큐(Queue) 기본 원리와 종류 (단순 큐, 순환 큐, 우선순위 큐) (0) | 2024.03.16 |
선형구조 연결 리스트의 기본 원리와 종류 (0) | 2024.03.13 |
데이터 구조 소개, 종류(선형, 비선형) 그리고 배열 (1) | 2024.03.08 |
많은 기업들이 자료구조와 알고리즘을 중시하는 이유 (0) | 2024.03.07 |