Notice
Recent Posts
Recent Comments
코드 위의 하루 (A Day on the Code)
Chapter 4. 스택(Stack) 본문
1. 스택이란? 🍽️
스택(Stack) 은 접시 쌓기처럼 나중에 들어온 데이터가 먼저 나가는 구조예요!
- 정의: LIFO (Last In First Out)
- 예시:
- 웹 브라우저 뒤로가기 ⬅️
- 편집기의 되돌리기 (Undo) ↩️
- 함수 호출 스택 ⛓️
가장 최근에 쌓인 게 먼저 나간다!
2. 스택 구조와 연산 ⚙️
✅ 주요 연산
연산 | 설명 |
push(e) | 요소 e를 스택에 추가 |
pop() | 스택의 맨 위 요소를 꺼냄 |
peek() | 삭제 없이 맨 위 확인 |
is_empty() | 스택이 비었는지 확인 |
is_full() | 스택이 꽉 찼는지 확인 (배열 스택인 경우) |
🧱 구조 그림
[ ] ← 바닥
[ 30 ]
[ 20 ]
[ 10 ] ← top (가장 최근)
3. 스택 구현 예제 (Python) 🐍
class Stack:
def __init__(self):
self.stack = []
def push(self, item):
self.stack.append(item)
def pop(self):
return self.stack.pop()
def peek(self):
return self.stack[-1] if self.stack else None
def is_empty(self):
return len(self.stack) == 0
4. 스택의 응용 예제 💡
(1) 괄호 검사기 (){}[] ✅❌
올바른 괄호 쌍을 확인하는 프로그램
검사 조건:
- 왼쪽 괄호 개수 = 오른쪽 괄호 개수
- 괄호 짝은 순서대로 나와야 함
- 서로 교차하지 않아야 함 ([ ( ] ) ❌)
✔️ 예시 코드:
def check_brackets(expr):
stack = []
for ch in expr:
if ch in '({[':
stack.append(ch)
elif ch in ')}]':
if not stack:
return False
top = stack.pop()
if not ((top == '(' and ch == ')') or
(top == '[' and ch == ']') or
(top == '{' and ch == '}')):
return False
return not stack
🧪 테스트:
check_brackets("({[()]})") # True
check_brackets("({[([)])}") # False
(2) 수식 계산기 🧮
우리가 흔히 쓰는 중위표기법(2 + 3) 을 → 후위표기법(2 3 +) 으로 바꿔 계산!
📌 알고리즘 (후위표기 계산):
- 숫자는 스택에 push
- 연산자가 나오면 2개 pop해서 계산
- 결과를 다시 push
- 마지막 하나가 정답
✔️ 예시 코드:
def calc_postfix(expr):
stack = []
for token in expr:
if token.isdigit():
stack.append(int(token))
else:
b = stack.pop()
a = stack.pop()
if token == '+':
stack.append(a + b)
elif token == '-':
stack.append(a - b)
elif token == '*':
stack.append(a * b)
elif token == '/':
stack.append(a / b)
return stack[0]
🧪 테스트:
calc_postfix("23*4+") # (2 * 3) + 4 = 10
(3) 미로 탐색 🧭
🔍 문제:
미로에서 출구를 찾는 알고리즘 — 가다가 막히면 가장 최근 갈림길로 되돌아감
✅ 사용 기술: DFS (깊이우선탐색) + 스택
- 가던 길이 막히면 pop 해서 뒤로 돌아감
- 갈 수 있는 길이 있으면 push
정리 📝
활용 | 설명 |
괄호 검사 | 스택에 괄호 저장해서 짝 맞추기 |
수식 계산 | 중위 → 후위 변환, 후위 계산 |
미로 탐색 | DFS에서 되돌아갈 길 기억 |
마무리 멘트
스택은 알고 보면 정말 유용한 자료구조예요!
기본 원리는 단순하지만, 괄호 검사, 수식 계산, DFS 등
실제 소프트웨어 곳곳에서 사용됩니다.
"나중에 쌓은 걸 먼저 꺼낸다"는 원칙 하나로
복잡한 문제를 아주 깔끔하게 해결할 수 있어요!
'🍚전공이 밥 먹여준다믄 > 📗 자료구조' 카테고리의 다른 글
🔥 원형 덱(Circular Deque) 실습으로 마스터하기! (0) | 2025.05.19 |
---|---|
큐와 덱 완전 정복! - 자료구조 속 FIFO, LIFO, 우선순위까지 한눈에 살펴보기 (0) | 2025.05.19 |
자료구조 중간고사 총정리 & 예상문제 풀이 (0) | 2025.05.12 |
Chapter 3 정리 - 스택과 큐 완전 정복 (0) | 2025.05.12 |
Chapter 2 정리 - 리스트 구조 완전 정복 (0) | 2025.05.12 |