6강 / 20강
스택 — 마지막에 쌓은 접시를 먼저
실행 취소(Ctrl+Z)가 동작하는 원리
싱크대에 접시를 쌓았습니다. 이제 하나를 꺼내려면? 맨 위 것부터죠. 맨 아래 접시를 꺼내려면 위를 다 치워야 합니다.
이렇게 마지막에 넣은 것이 가장 먼저 나오는 규칙을 LIFO(Last In, First Out)라고 하고, 이 규칙을 지키는 자료구조가 스택(stack)입니다.
파이썬에는 Stack 이라는 이름의 자료형이 따로 없습니다.
리스트의 append() 와 pop() 이 이미 정확히 스택이기 때문이에요.
리스트 두 함수만으로 스택이 완성됩니다.
Python
브라우저에서 실행
🎮 접시를 직접 쌓아 보세요
넣기와 빼기를 반복하면서 항상 맨 위에서만 일이 일어나는 걸 확인해 보세요. 빈 스택에서 꺼내려 하면 어떻게 되는지도 눌러 보시고요.
쓸모 ① 실행 취소 (Ctrl+Z)
여러분이 글을 쓸 때마다 프로그램은 직전 상태를 스택에 쌓아 둡니다. Ctrl+Z를 누르면 스택에서 하나 꺼내 되돌리죠. 그래서 가장 최근 것부터 취소되는 겁니다.
Ctrl+Z 를 12줄로 만들어 봅니다.
Python
브라우저에서 실행
쓸모 ② 괄호 짝 맞추기
여는 괄호를 만나면 쌓고, 닫는 괄호를 만나면 꺼내서 짝이 맞는지 봅니다. 끝났을 때 스택이 비어 있으면 완벽하게 맞은 거예요. 코드 편집기가 괄호 오류를 잡아내는 방법이 바로 이겁니다.
편집기가 괄호를 검사하는 실제 알고리즘입니다.
Python
브라우저에서 실행
브라우저의 ← → 버튼을 스택 두 개로 재현합니다.
Python
브라우저에서 실행
🤔 확인 문제
스택에 1, 2, 3 을 순서대로 넣은 뒤 두 번 꺼내면 나오는 순서는?
해설 스택은 LIFO — 마지막에 넣은 3이 먼저 나오고 그다음 2입니다. 남은 것은 1이에요.
🤔 확인 문제
다음 중 스택이 가장 어울리지 않는 상황은?
해설 매표소는 먼저 온 사람이 먼저 — FIFO입니다. 스택으로 만들면 마지막에 온 사람이 먼저 표를 사게 돼요. 이건 다음 강의 큐의 일입니다.
🤔 확인 문제
파이썬 리스트로 스택을 만들 때
pop() 대신 pop(0) 을 쓰면?해설
pop(0)은 맨 앞을 꺼내므로 FIFO가 됩니다. 게다가 2강에서 본 것처럼 나머지가 전부 한 칸씩 밀려서 느려요. 스택은 반드시 양 끝 중 같은 쪽에서 넣고 빼야 합니다.