본문 바로가기
TYLER SONG2026
블로그 목록
CS학습

Binary Search: 정렬된 데이터에서 효율적인 탐색을 위한 분할 정복 알고리즘

이진 탐색은 정렬된 배열에서 특정 값을 찾는 효율적인 알고리즘입니다. 배열을 반복적으로 절반으로 나누어 탐색 범위를 좁혀나가며 목표 값을 찾습니다. 시간 복잡도가 O(log n)으로, 선형 탐색보다 훨씬 빠릅니다.

송민성3분 읽기

1. 개념

이진 탐색(Binary Search)은 정렬된 배열에서 특정 값의 존재 여부 또는 위치를 찾는 알고리즘입니다. 배열의 중간 값을 확인하여, 찾고자 하는 값보다 크면 왼쪽 절반, 작으면 오른쪽 절반에서 다시 탐색을 진행합니다. 이 과정을 반복하여 탐색 범위를 좁혀나갑니다.

2. 왜 사용하는가

선형 탐색(Linear Search)은 배열의 모든 요소를 순차적으로 확인하기 때문에 최악의 경우 O(n)의 시간 복잡도를 가집니다. 반면, 이진 탐색은 배열을 절반씩 나누어 탐색하므로 O(log n)의 시간 복잡도를 가집니다. 따라서, 데이터의 양이 많을수록 이진 탐색의 효율이 더 두드러집니다.

3. 동작 원리

  1. 정렬된 배열의 중간 인덱스(mid)를 계산합니다.
  2. arr[mid]와 찾고자 하는 값(target)을 비교합니다.

* arr[mid] == target이면 탐색 성공, mid를 반환합니다. * arr[mid] > target이면 탐색 범위를 왼쪽 절반(arr[low...mid-1])으로 줄입니다. * arr[mid] < target이면 탐색 범위를 오른쪽 절반(arr[mid+1...high])으로 줄입니다.

  1. low > high가 될 때까지 1, 2단계를 반복합니다. 이 경우 탐색 실패입니다.

4. 코드 예제

python
def binary_search(arr, target): """ 정렬된 배열에서 target 값을 이진 탐색으로 찾습니다. Args: arr: 정렬된 배열 target: 찾고자 하는 값 Returns: target 값의 인덱스. 찾지 못하면 -1 반환. """ low = 0 high = len(arr) - 1 while low <= high: mid = (low + high) // 2 # 중간 인덱스 계산 if arr[mid] == target: return mid elif arr[mid] < target: low = mid + 1 # 오른쪽 절반 탐색 else: high = mid - 1 # 왼쪽 절반 탐색 return -1 # 찾지 못함 # 예제 arr = [2, 5, 7, 8, 11, 12] target = 11 result = binary_search(arr, target) if result != -1: print(f"{target}은(는) 인덱스 {result}에 있습니다.") else: print(f"{target}을(를) 찾을 수 없습니다.")

5. 시간 복잡도 또는 성능 특성

이진 탐색의 시간 복잡도는 최선, 평균, 최악의 경우 모두 O(log n)입니다. 이는 탐색할 데이터의 양이 두 배로 늘어날 때마다 탐색 횟수가 1번 증가한다는 의미입니다. 공간 복잡도는 O(1)로, 추가적인 메모리를 사용하지 않습니다.

6. 실무 사용 사례

  • 데이터베이스 검색: 데이터베이스 인덱스 검색에서 사용됩니다.
  • 정렬된 배열의 값 검색: 대용량 정렬된 데이터에서 특정 값을 빠르게 찾을 때 유용합니다.
  • API 검색: 정렬된 API 응답에서 특정 데이터를 검색하는 데 사용될 수 있습니다.

7. 주의할 점

  • 정렬된 배열: 이진 탐색은 반드시 정렬된 배열에서만 사용할 수 있습니다.
  • 중복 값: 배열에 중복 값이 있는 경우, 이진 탐색은 중복 값 중 하나의 인덱스를 반환합니다.
  • 재귀 호출: 재귀적인 방법으로도 구현할 수 있지만, 반복적인 방법이 일반적으로 성능 면에서 더 효율적입니다.

8. 핵심 정리

이진 탐색은 정렬된 데이터에서 효율적인 탐색을 위한 강력한 알고리즘입니다. O(log n)의 시간 복잡도로 대용량 데이터 처리 시 성능 향상을 기대할 수 있습니다. 하지만, 반드시 정렬된 배열에서만 사용할 수 있다는 점을 기억해야 합니다.

© 2026 Tyler Song