스택은 후입선출(LIFO, Last-In-First-Out) 원칙에 따라 데이터를 쌓고, 가장 최근에 쌓인 데이터가 가장 먼저 처리되는 자료구조입니다. 주로 함수 호출과 관련된 작업, 괄호 검사, 뒤로 가기 등의 기능을 구현할 때 유용하게 사용됩니다.
스택은 기본적으로 두 가지 주요 동작을 수행합니다:
파이썬에서 스택을 구현하는 방법은 간단합니다. 리스트(List)를 사용하여 스택을 구현할 수 있습니다. 파이썬 리스트는 동적 배열로 크기가 자동으로 조정되므로 스택으로 사용하기에 적합합니다.
class Stack:
def __init__(self):
self.items = []
def is_empty(self):
return len(self.items) == 0
def push(self, item):
self.items.append(item)
def pop(self):
if not self.is_empty():
return self.items.pop()
def peek(self):
if not self.is_empty():
return self.items[-1]
def size(self):
return len(self.items)
프로그래머스나 백준에 가면 유사 문제가 다양하니, 풀어보시는 것을 추천합니다!
def is_balanced(expression):
stack = Stack()
opening_brackets = '([{'
closing_brackets = ')]}'
for char in expression:
if char in opening_brackets:
stack.push(char)
elif char in closing_brackets:
if stack.is_empty() or closing_brackets.index(char) != opening_brackets.index(stack.pop()):
return False
return stack.is_empty()
print(is_balanced("()")) # True
print(is_balanced("{[()]}")) # True
print(is_balanced("{[(])}")) # False
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n-1)
print(factorial(5)) # 출력: 120