DSData StructuresPython learning path
0 / 12 완료
LESSON 03

스택

가장 나중에 들어온 일을 가장 먼저 처리하는 LIFO 구조

왜 스택을 쓸까요?

중첩된 작업을 되돌아가거나 최근 상태부터 복구해야 할 때 필요합니다. 함수 호출, 괄호 짝, 실행 취소처럼 ‘마지막에 시작한 것이 먼저 끝나는’ 문제의 모양과 정확히 맞습니다.

LIFE EXAMPLE

생활 속에서 먼저 이해해 볼까요?

코드를 생각하지 말고, 아래 상황이 어떤 순서로 움직이는지만 따라가 보세요.

현실 예시 1

식당의 접시 더미

깨끗한 접시를 위에 올리고 손님은 가장 위의 접시부터 가져갑니다.

자료구조와 연결하면마지막에 올린 접시가 가장 먼저 나오는 LIFO 순서입니다.
현실 예시 2

잘못 쓴 문장 되돌리기

글을 세 번 고친 뒤 실행 취소를 누르면 세 번째 수정부터 두 번째, 첫 번째 순서로 돌아갑니다.

자료구조와 연결하면최근 작업을 위에 쌓아 두었다가 역순으로 꺼내는 스택입니다.

실무에서는 이렇게 씁니다

코딩 테스트의 장난감 예제를 넘어, 실제 시스템에서 같은 원리가 어디에 숨어 있는지 연결해 보세요.

01

브라우저 뒤로가기

방문 기록의 최신 페이지부터 되돌립니다.

02

에디터 Undo

사용자의 최근 편집 명령을 역순으로 취소합니다.

03

파서·런타임

열린 괄호와 함수 호출 프레임을 쌓고 완료 시 꺼냅니다.

04

앱 화면 이동

최근에 연 화면부터 닫아 이전 화면으로 돌아갑니다.

05

거래 롤백

여러 변경 중 실패하면 가장 최근 변경부터 역순으로 되돌립니다.

어떤 원리로 동작하나요?

한쪽 끝(top)에서만 넣고 빼는 구조입니다. 파이썬에서는 리스트의 append()pop()으로 구현하면 두 연산 모두 평균 O(1)입니다.

핵심 연산과 비용

연산Python 표현시간
넣기stack.append(x)평균 O(1)
빼기stack.pop()O(1)
맨 위 확인stack[-1]O(1)
포함 확인x in stackO(n)
STEP BY STEP

괄호 문자열 ([]) 검사

  1. 1
    '(' 읽기stack = ['(']
  2. 2
    '[' 읽기stack = ['(', '[']
  3. 3
    ] 읽기'['를 pop → stack = ['(']
  4. 4
    ) 읽기'('를 pop → stack = []; 유효

⚠ 자주 하는 실수

  • 빈 스택에서 pop하면 예외가 발생하므로 먼저 비었는지 확인합니다.
  • 앞쪽에서 pop(0)하면 스택이 아니라 느린 큐가 됩니다.
  • 괄호 문제에서는 닫는 괄호의 종류가 top과 짝인지까지 확인해야 합니다.