[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;
};

키워드

좋은 웹페이지 즐겨찾기