원리 · intermediate

스택·큐: LIFO와 FIFO

괄호 매칭, 단조 스택, BFS 큐의 기본과 구현.

배우기 · 알고리즘 원리 · 18분 · 4/14 · 스택 · 큐 · BFS

이 트랙 목차 (14)
  1. 1. 시간·공간 복잡도 (Big-O) 제대로 읽기
  2. 2. 투포인터: 양끝·같은방향
  3. 3. 해시맵·해시셋: 빠른 조회
  4. 4. 스택·큐: LIFO와 FIFO
  5. 5. 재귀와 이분 탐색
  6. 6. 슬라이딩 윈도우
  7. 7. 동적 계획법 입문 (DP)
  8. 8. 누적합·차분 배열
  9. 9. 그래프 탐색: BFS·DFS
  10. 10. 정렬을 언제 쓰나: 전처리·이분·그리디
  11. 11. 그리디: 탐욕 선택과 반례
  12. 12. 행렬·격자: 인덱싱과 방문
  13. 13. 비트 연산 기초: AND OR XOR · 플래그
  14. 14. 우선순위 큐·힙 감각

정의

언어별 구현

구조JSPython
스택arr.push / poplist.append / pop
arr.shift는 O(n) → 인덱스로 흉내 또는 deque 대안collections.deque
from collections import deque
q = deque()
q.append(1)      # 뒤
x = q.popleft()  # 앞
// 간단 큐 (입력이 작을 때)
const q = [];
let head = 0;
q.push(x);
const y = q[head++];

패턴 1: 괄호·짝 맞추기

const pair = { ')': '(', ']': '[', '}': '{' };
const st = [];
for (const ch of s) {
  if (ch === '(' || ch === '[' || ch === '{') st.push(ch);
  else {
    if (!st.length || st.pop() !== pair[ch]) return false;
  }
}
return st.length === 0;

열린 것을 쌓고, 닫을 때 꼭대기와 짝인지 봅니다.

패턴 2: 단조 스택 (맛보기)

스택에 증가/감소 순을 유지하며, 현재 값보다 약한 후보를 팝합니다.
다음 큰 원소, 히스토그램 넓이 등에 쓰입니다. 처음엔 “괄호 + 계산기”만 익혀도 충분합니다.

패턴 3: BFS와 큐

레벨·최단 거리(가중치 0/1이 아닌 동일 비용)에 큐를 씁니다.

from collections import deque
q = deque([start])
seen = {start}
while q:
    cur = q.popleft()
    for nxt in neighbors(cur):
        if nxt not in seen:
            seen.add(nxt)
            q.append(nxt)

DFS는 스택(또는 재귀)과 붙습니다.

함정

복잡도

각 원소가 최대 한 번 push/pop되면 전체 O(n)인 경우가 많습니다.

관련 짧은 원리

관련 문제