이분 탐색은 정렬된 배열에서 특정 값을 빠르게 찾기 위한 알고리즘입니다.
배열의 중간 값을 기준으로 탐색 범위를 절반으로 줄여나가는 방식으로 동작합니다.
public int binarySearch(int[] arr, int target) {
int left = 0;
int right = arr.length - 1;
while (left <= right) {
int mid = left + (right - left) / 2; // 중간값 계산
if (arr[mid] == target) {
return mid; // 값 찾음
} else if (arr[mid] < target) {
left = mid + 1; // 오른쪽으로 이동
} else {
right = mid - 1; // 왼쪽으로 이동
}
}
return -1; // 값이 없음
}
public int binarySearchRecursive(int[] arr, int target, int left, int right) {
if (left > right) return -1; // 종료 조건
int mid = left + (right - left) / 2;
if (arr[mid] == target) {
return mid;
} else if (arr[mid] < target) {
return binarySearchRecursive(arr, target, mid + 1, right);
} else {
return binarySearchRecursive(arr, target, left, mid - 1);
}
}
public static void main(String[] args) {
int[] arr = {1, 3, 5, 7, 9, 11};
int target = 7;
int index = binarySearch(arr, target);
if (index != -1) {
System.out.println("Target found at index: " + index);
} else {
System.out.println("Target not found.");
}
}
출력: Target found at index: 3
이분 탐색은 효율적이고 직관적인 알고리즘으로, 문제 해결의 기본이 되는 중요한 기법이라고 느꼈습니다. 특히, 탐색 범위를 절반씩 줄여나가는 과정은 논리적이고 간결하며, 코드 구현에서도 큰 만족감을 주는 부분이었습니다. 앞으로 다양한 문제에서 이분 탐색을 적극 활용해보고 싶습니다.