DSData StructuresPython learning path
0 / 12 완료
LESSON 06

이진 탐색

정답 후보를 절반씩 버려 로그 시간에 찾는 방법

왜 이진 탐색을 쓸까요?

데이터가 정렬되어 있거나 ‘이 값 이하는 가능, 그 이상은 불가능’ 같은 단조성이 있을 때 탐색 범위를 매번 절반으로 줄입니다. 수백만 개 후보도 약 20번 비교로 좁힐 수 있습니다.

LIFE EXAMPLE

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

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

현실 예시 1

숫자 맞히기 게임

1부터 100 중 정답이 73일 때 50보다 큰지 묻고, 다음에는 75보다 작은지 물으며 범위를 절반씩 줄입니다.

자료구조와 연결하면한 번 질문할 때마다 후보 절반을 버리는 이진 탐색입니다.
현실 예시 2

종이 영어사전

M 근처를 펼쳤는데 찾는 단어가 S로 시작하면 앞쪽 절반은 더 볼 필요가 없습니다.

자료구조와 연결하면이미 알파벳순으로 정렬되어 있어 절반씩 건너뛸 수 있습니다.

실무에서는 이렇게 씁니다

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

01

정렬된 인덱스

타임스탬프 배열에서 특정 시점의 첫 로그를 찾습니다.

02

용량 계획

제한 시간 안에 처리 가능한 최대 배치 크기를 찾습니다.

03

임계값 튜닝

정확도 조건을 만족하는 최소 threshold를 찾습니다.

04

예약 시간 찾기

정렬된 빈 시간 목록에서 원하는 시각 이후의 첫 예약 가능 시간을 찾습니다.

05

제품 버전 추적

문제가 처음 발생한 릴리스 버전을 절반씩 좁혀 찾아냅니다.

어떤 원리로 동작하나요?

왼쪽과 오른쪽 경계의 중간값을 검사한 뒤, 정답이 있을 수 없는 절반을 버립니다. 경계의 의미를 끝까지 동일하게 유지하는 것이 핵심이며 시간 복잡도는 O(log n)입니다.

핵심 연산과 비용

연산Python 표현시간
정확한 값 찾기binary searchO(log n)
첫 위치bisect_leftO(log n)
삽입 위치 찾기bisectO(log n)
리스트 중간 삽입insortO(n)
STEP BY STEP

[1, 3, 5, 7, 9]에서 7 찾기

  1. 1
    범위 0..4mid = 2, 값 5 → 목표가 더 큼
  2. 2
    범위 3..4왼쪽 경계를 3으로 이동
  3. 3
    mid = 3값 7 → 목표 발견
  4. 4
    종료인덱스 3 반환

⚠ 자주 하는 실수

  • 입력이 정렬됐는지 먼저 확인합니다.
  • left <= rightleft < right를 섞으면 무한 루프나 누락이 생깁니다.
  • 정답의 최솟값/최댓값을 찾을 때는 발견 즉시 반환하지 않고 경계를 더 좁힙니다.