프로그래밍 기초편 · 탐색과 정렬

이진 탐색: 숫자 맞히기 게임의 최적해

지난 레슨의 가장 편한 초록 선 O(log n), 오늘 그 정체를 벗겨요. 어릴 때 「1부터 100까지 숫자 하나 생각했어, 맞춰 봐」 해 본 적 있나요? 숫자 맞히기의 최적 전략이 바로 컴퓨터 과학의 가장 고전적인 알고리즘 중 하나—이진 탐색입니다. 먼저 플레이하고, 그다음 원리를 말해요.

인터랙티브 1 · 숫자 맞히기 게임

시스템이 이미 1부터 100 사이 숫자를 정해 두었어요. 아래 띠가 후보 전부입니다: 아무 숫자나 눌러 맞혀 보세요. 크면/작다를 알려 주고, 제외된 숫자는 자동으로 회색이 됩니다. 먼저 감으로 아무거나 찍어 횟수를 적고, 「이진 탐색으로 맞히기」를 눌러 모범 답을 보세요. 보세요: 이진으로 한 번 맞힐 때마다 밝은 영역이 정확히 절반으로 줄어요.

띠 위 아무 숫자를 눌러 맞히기 시작 → 0
왜 최대 7번일까요? 후보 100개 → 절반 자르면 50, 다시 25, 12, 6, 3, 1…… 7번이면 반드시 하나만 남아요. 아무거나 찍으면 운이 나쁠 때 수십 번이고, 운이 좋아도 불안정해요. 이진 탐색은 운에 기대지 않습니다—「최악 경우의 보장」을 줍니다—엔지니어가 가장 중시하는 바로 그것이에요.
인터랙티브 2 · 10억 개도 30번이면

「절반 자르기」의 힘은 데이터가 클 때 진짜로 드러나요. 아래 데이터량을 눌러 이진이 최대 몇 번인지 보고, 「연속 접기」 애니메이션을 보세요. 보세요: 데이터가 만 배가 되어도 횟수는 7에서 20 남짓으로만 늘어요.

최대 7 회면 충분(log₂ n 올림)
100개
분홍 바 = 아직 제외되지 않은 후보 범위. 위 데이터량 버튼을 눌러 연속으로 접히는 모습을 보세요.

⚠️ 중요한 전제: 이진 탐색의 입장권은 「먼저 정렬」

숫자 맞히기가 되는 이유는 숫자에 크기 순서가 있기 때문이에요—「크다」는 힌트가 의미를 갖습니다. 페이지 순서가 뒤섞인 사전으로 바꾸면, 중간을 펼쳐 「고양이」가 나와도 「개」가 왼쪽인지 오른쪽인지 알 수 없고, 이진 탐색은 바로 무력화됩니다. 그래서 O(log n) 탐색을 누리려면 먼저 정렬 비용을 내야 해요—정렬을 어떻게 하고 얼마나 비싼지는 바로 다음 레슨의 주인공입니다.

일상 속 진짜 모습 · 사실 이미 이진을 쓰고 있어요
📖

사전 / 연락처 넘기기

「王」을 찾을 때 첫 장부터 안 넘깁니다: 중간을 펴고 철자 앞뒤를 비교해 절반을 버립니다—손동작이 곧 이진 탐색이에요.

🔍

git bisect로 나쁜 커밋 찾기

커밋 1000개 중 하나가 버그를 넣었나요? git이 중간 커밋으로 점프해 테스트하게 하고, 좋은 쪽/나쁜 쪽을 잘라 10번 안에 범인을 잠급니다.

🎯

가격 맞히기 / 파라미터 조정

「이 술 얼마야?」「높다」「낮다」—예능 가격 맞히기에서 고수는 머릿속으로 이진을 합니다. 하이퍼파라미터를 손으로 좁혀 가는 것도 같은 수예요.

이 강의가 전하고 싶은 것