[Toy] binarySearch
10_binarySearch
문제
오름차순 정렬된 정수의 배열(arr)과 정수(target)를 입력받아 target의 인덱스를 리턴해야 합니다.
입력
인자 1 : arr
- number 타입을 요소로 갖는 배열
- arr[i]는 정수
인자 2 : target
- number 타입의 정수
출력
- number 타입을 리턴해야 합니다.
주의사항
- 이진탐색 알고리즘(O(logN))을 사용해야 합니다.
- 단순한 배열 순회(O(N))로는 통과할 수 없는 테스트 케이스가 존재합니다.
- target이 없는 경우, -1을 리턴해야 합니다.
입출력 예시
let output = binarySearch([0, 1, 2, 3, 4, 5, 6], 2);
console.log(output); // --> 2
output = binarySearch([4, 5, 6, 9], 100);
console.log(output); // --> -1
수도코드
arr의 배열을 left, right로 분리하고 middle값을 찾은 다음
target과 비교해서 target이 더 크다면 right를 arr로 대체해서 다시 콜백 -> 비교
이러한 진행을 반복해서 값이 있는지 확인하고 더 이상 진행할 수 없다면 (while문 사용) return -1을 한다.
Code
//[0, 1, 2, 3, 4, 5, 6] target=2로 예시
const binarySearch = function (arr, target) {
let left = 0, right = arr.length-1; // right=6
while(left <= right){
// mid=3 > mid=1 > mid=2
let mid = Math.round((left+right)/2)
if(arr[mid] === target){
return mid
}
if(target < arr[mid]) {
// right = 2
right = mid -1;
} else {
// left=1
left = mid + 1;
}
}
return -1;
};
키워드
Author And Source
이 문제에 관하여([Toy] binarySearch), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@ge5rg2/Toy-binarySearch저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)