C#의 BinarySearch() 메서드는 숫자, 영숫자, 문자열 등 어떤 자료형이든 정렬된 리스트에서 특정 요소가 위치한 인덱스를 찾아주는 메서드입니다. 이진 탐색(Binary Search) 알고리즘을 기반으로 동작하기 때문에 선형 탐색보다 훨씬 빠른 성능을 보여주며, 시간 복잡도는 O(log n)입니다.
BinarySearch() 메서드란?
BinarySearch()를 사용하려면 반드시 리스트가 오름차순으로 정렬되어 있어야 합니다. 정렬되지 않은 리스트에 사용하면 잘못된 결과(음수 값)가 반환될 수 있습니다.
- 요소를 찾은 경우: 해당 요소의 0부터 시작하는 인덱스를 반환합니다.
- 요소를 찾지 못한 경우: 음수 값을 반환하며, 이 값의 비트 보수(~ 연산)를 적용하면 해당 요소가 삽입되어야 할 위치의 인덱스를 알 수 있습니다.
예제 코드
먼저 다음과 같이 정렬된 정수형 리스트를 생성해 보겠습니다.
List<int> list = new List<int>(); list.Add(70); list.Add(150); list.Add(220); list.Add(250); list.Add(300);
이제 250이 몇 번째 인덱스에 위치하는지 확인하기 위해 BinarySearch() 메서드를 호출합니다.
list.BinarySearch(250);
전체 예제
using System;
using System.Collections.Generic;
class Demo {
static void Main() {
List<int> list = new List<int>();
list.Add(70);
list.Add(150);
list.Add(220);
list.Add(250);
list.Add(300);
int value = list.BinarySearch(250);
Console.WriteLine("Element 250 at Index: " + value);
}
}실행 결과
Element 250 at Index: 3
위 실행 결과에서 볼 수 있듯이, 값 250은 리스트의 인덱스 3에 위치하고 있음을 확인할 수 있습니다. 리스트의 인덱스는 0부터 시작하므로 네 번째 요소에 해당합니다.
정리
BinarySearch() 메서드는 대용량의 정렬된 데이터에서 특정 값을 빠르게 찾을 때 매우 유용합니다. 단, 사용 전에 반드시 List.Sort() 등을 통해 리스트가 정렬되어 있는지 확인하는 것이 중요합니다.