Skip to content

이진 탐색(Binary Search) ​

μ •μ˜ ​

μ •λ ¬λœ λ°°μ—΄μ˜ 쀑앙에 μœ„μΉ˜ν•œ μ›μ†Œμ™€ 비ꡐ λ˜ν’€μ΄.

탐색 방법 ​

λ°°μ—΄μ˜ 쀑앙에 μžˆλŠ” 값을 μ‘°μ‚¬ν•˜μ—¬ 찾고자 ν•˜λŠ” ν•­λͺ©μ΄ μ™Όμͺ½ λ„λŠ” 였λ₯Έμͺ½ λΆ€λΆ„ 배열에 μžˆλŠ”μ§€λ₯Ό μ•Œμ•„λ‚΄μ–΄ νƒμƒ‰μ˜ λ²”μœ„λ₯Ό 반으둜 쀄인닀.

탐색 탐색

쑰건 ​

이진 탐색은 기본적으둜 배열이 μ •λ ¬λ˜μ–΄μžˆμŒμ„ μ›μΉ™μœΌλ‘œν•œλ‹€.

이진탐색을 κ΅¬ν˜„ν•  땐 μ •λ ¬λœ λ°°μ—΄μ˜ 쀑앙 인덱슀의 값이 μ–΄λ–€ κ°’κ³Ό μ–΄λ–»κ²Œ 비ꡐ할 것인가가 μ€‘μš”ν•˜λ‹€. 이것은 μ£Όμ–΄μ§„ λ¬Έμ œμ—λ”°λΌ λ‹¬λΌμ§€κΈ°λ•Œλ¬Έμ— 문제λ₯Ό 읽고 μ΄ν•΄ν•œλ’€μ— left와 rightκ°€ μ–΄λ””λ‘œ ν–₯ν•  것인가λ₯Ό λ¨Όμ € μƒκ°ν•˜κ³  κ΅¬ν˜„ν•˜λŠ” 것이 μ€‘μš”ν•˜λ‹€.

μ½”λ“œ ​

1~10이 λ“€μ–΄μžˆλŠ” λ°°μ—΄μ—μ„œ target을 μ°ΎλŠ” λ‘œμ§μ΄λ‹€.

ts
binarySearch([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 7)
function binarySearch(arr: number[], target: number) {
  let [left, right] = [0, arr.length]

  while (left < right) {
    const mid = Math.floor((left + right) / 2)

    if (arr[mid] < target) left = mid + 1
    else right = mid
  }

  console.log('left :: ', left, ', arr[left] :: ', arr[left])
  console.log('right :: ', right, ', arr[right] :: ', arr[right])
}

// left ::  6 , arr[left] ::  7
// right ::  6 , arr[right] ::  7