이 순서도가 보여 주는 핵심
이진 탐색의 핵심은 “가운데 값과 목표값을 비교한 뒤, 답이 될 수 없는 절반을 버린다”는 것입니다. 순서도에서는 반복을 계속할 수 있는가, 정답을 찾았는가, 어느 절반을 남길 것인가를 각각 하나의 조건으로 분리했습니다. 그래서 코드의 if·while 구조와 실패 조건이 함께 보입니다.
전제 조건: 배열은 정렬되어 있어야 합니다
오름차순으로 정렬된 배열에서만 arr[mid] < target이면 오른쪽 절반을, 그렇지 않으면 왼쪽 절반을 버릴 수 있습니다. 정렬되지 않은 데이터에 같은 흐름을 적용하면 비교 결과만으로 목표값의 위치를 판단할 수 없습니다. 이 전제는 시작 노드 또는 메모 노드에 꼭 남기세요.
노드가 코드의 어느 부분인지
| 순서도 | 코드 역할 | 왜 필요한가 |
|---|---|---|
| low ≤ high? | while 조건 | 남은 탐색 범위가 있는지 확인합니다. |
| mid 계산 | 중간 인덱스 계산 | 현재 범위를 둘로 나눕니다. |
| arr[mid] = target? | 성공 분기 | 찾은 즉시 반복을 끝냅니다. |
| arr[mid] < target? | 방향 분기 | 남길 절반을 결정합니다. |
| low/high 갱신 | 반복 본문 | 범위를 반드시 줄여 종료를 보장합니다. |
작은 예로 따라가기
[3, 8, 12, 17, 24, 31, 42]에서 31을 찾는다고 해보세요. 처음 가운데 17은 목표보다 작으므로 low를 가운데 다음으로 옮깁니다. 남은 범위의 가운데 31은 목표와 같으므로 성공합니다. 매 반복마다 남은 후보가 절반가량 줄기 때문에 많은 데이터에서도 효율적입니다.
흔한 실수
low또는high를 갱신하지 않아 같은 범위를 계속 검사하지 않는지 확인합니다.- 목표값을 찾지 못했을 때의
-1반환 경로가 있는지 확인합니다. - 배열 정렬 방향과 비교 조건이 서로 맞는지 확인합니다.
- 중간값 계산에서 언어별 정수 나눗셈과 큰 수 처리 방식을 확인합니다.
점검 진행률: 0 / 4
순서도가 특히 유용한 이유
코드는 정확한 실행 방법을 표현하고, 순서도는 반복·분기·종료의 구조를 빠르게 검토하게 합니다. 구현 전에 이 순서도로 성공·실패·반복 경로가 모두 있는지 확인한 뒤 코드로 옮기면, 조건을 빠뜨리는 실수를 줄일 수 있습니다.
