원리 · beginner

시간·공간 복잡도 (Big-O) 제대로 읽기

입력이 커질 때 비용이 어떻게 늘는지, 흔한 복잡도 계급과 측정 습관.

배우기 · 알고리즘 원리 · 18분 · 1/14 · 복잡도 · Big-O

이 트랙 목차 (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. 우선순위 큐·힙 감각

왜 배우는가

같은 정답이어도 느린 코드는 큰 입력에서 시간 초과가 납니다.
Big-O는 “상수 몇 배”가 아니라 n이 커질 때 지배적인 성장을 말합니다.

흔한 계급 (대략 빠른 순)

표기이름감각 (n=10³)
O(1)상수맵/배열 인덱스 접근
O(log n)로그이분 탐색
O(n)선형한 번 훑기
O(n log n)선형로그비교 정렬
O(n²)제곱이중 루프
O(2ⁿ) / O(n!)지수·팩토리얼부분집합·순열 전부

코딩 테스트 감각: n≤10⁵이면 보통 O(n log n)까지, n≤10³이면 O(n²)도 종종 통과.

어떻게 세는가

  1. 가장 안쪽 작업이 몇 번 도는가
  2. 루프가 겹치면 곱, 이어지면 합 (지배항만 남김)
  3. 상수·낮은 차수는 보통 무시 (3n + 100 → O(n))
// O(n)
for (let i = 0; i < n; i++) sum += a[i];

// O(n²)
for (let i = 0; i < n; i++)
  for (let j = 0; j < n; j++) ...

// O(n log n)  ·  정렬
a.sort((x, y) => x - y);

공간 복잡도

추가로 쓰는 메모리입니다. 입력 배열 자체는 보통 제외하거나 문제에 따라 따로 말합니다.

함정

문제 읽기 체크리스트

  1. n의 상한이 어디에 적혀 있는가
  2. 내 초안 복잡도가 그 상한에 맞는가
  3. 더 빠른 자료구조(해시·정렬·투포인터)로 줄일 수 있는가

연습

이중 루프로 짠 뒤, “한 번만 훑으면 되나?”를 항상 한 번 더 물어보세요.
다음 레슨(투포인터·해시)이 그 답을 줍니다.

관련 짧은 원리

관련 문제