값을 찾기 위해 왼쪽에서 오른쪽 끝까지 이동하기보다는,
작은 조각으로 세분하여 각 조각들을 어디로 이동시킬지 결정하는 작업
/*
문제 - Divide and conquer (1)
Given a sorted array of integers, write a function
called search, that accepts a value and returns the
index where the value passed to the function is
located. If the value is not found, return -1.
*/
function search(arr, n) {
let end = arr.length - 1;
let start = 0;
let mid;
while (start <= end) {
mid = Math.floor((start + end) / 2);
if (n === arr[mid]) {
return mid;
} else if (n > arr[mid]) {
start = mid + 1;
} else {
end = mid - 1;
}
}
return -1;
}
console.log(search([1, 2, 3, 4, 5, 6], 4)); // 3
console.log(search([1, 2, 3, 4, 5, 6], 6)); // 5
console.log(search([1, 2, 3, 4, 5, 6], 11)); // -1
console.log(search([1, 3, 4, 5, 7, 8, 9, 10, 11], 11)); // 8
console.log(search([1, 3, 4, 5, 7, 8, 9, 10, 11], 1)); // 0
설명
술자리에서 소주뚜껑 숫자 맞추기할 때, 이진탐색을 통해 효율적으로 숫자에 접근할 수 있다.