|
| 1 | +--- |
| 2 | +title: "이진 검색 알고리즘" |
| 3 | +description: "binary search(이진 검색) 알고리즘 기록용" |
| 4 | +date: "2025-09-12T20:13:18" |
| 5 | +thumbnail: "./thumbnail.png" |
| 6 | +category: "Algorithm" |
| 7 | +tags: ["Algorithm"] |
| 8 | +--- |
| 9 | + |
| 10 | +# 이진 검색(Binary Search) 알고리즘 |
| 11 | + |
| 12 | +이진 검색 알고리즘은 **정렬**된 배열에서 특정 값을 찾는 알고리즘이에요. |
| 13 | + |
| 14 | +```ts |
| 15 | +function binarySearch(arr, elem) { |
| 16 | + let start = 0 |
| 17 | + let end = arr.length - 1 |
| 18 | + let middle = Math.floor((start + end) / 2) |
| 19 | + |
| 20 | + while (arr[middle] !== elem && start <= end) { |
| 21 | + if (elem < arr[middle]) { |
| 22 | + end = middle - 1 |
| 23 | + } else { |
| 24 | + start = middle + 1 |
| 25 | + } |
| 26 | + middle = Math.floor((start + end) / 2) |
| 27 | + } |
| 28 | + |
| 29 | + if (arr[middle] === elem) { |
| 30 | + return middle |
| 31 | + } |
| 32 | + |
| 33 | + return -1 |
| 34 | +} |
| 35 | +``` |
| 36 | + |
| 37 | +위 코드는 이진검색 알고리즘을 구현한 자바스크립트 코드에요. |
| 38 | + |
| 39 | +자바스크립트 코드를 보면 알 수 있듯이, 이진검색 알고리즘은 정렬된 배열에서 특정 값을 찾는 알고리즘이에요. |
| 40 | + |
| 41 | +`start` 변수는 시작 인덱스를 나타내고, `end` 변수는 끝 인덱스를 나타내요. |
| 42 | + |
| 43 | +`middle` 변수는 주어진 배열의 중간 인덱스를 나타냅니당. |
| 44 | + |
| 45 | +```ts |
| 46 | +while (arr[middle] !== elem && start <= end) { |
| 47 | + if (elem < arr[middle]) { |
| 48 | + end = middle - 1 |
| 49 | + } else { |
| 50 | + start = middle + 1 |
| 51 | + } |
| 52 | + middle = Math.floor((start + end) / 2) |
| 53 | +} |
| 54 | +``` |
| 55 | + |
| 56 | +이 로직이 핵심로직이 될텐데요. |
| 57 | + |
| 58 | +값을 찾거나 배열 전체를 모두 순회할(start <= end)때까지 반복하는 루프로 시작을해요. |
| 59 | + |
| 60 | +찾는 값이 현재 중간값보다 작으면 끝 인덱스를 중간 인덱스 - 1로 업데이트해요. |
| 61 | + |
| 62 | +왜냐면 찾는값이 중간값보다 왼쪽에 있을거니까 기존 배열의 오른쪽 반을 버리는거져. |
| 63 | + |
| 64 | +반대로 찾는값이 중간값보다 크면 시작 인덱스를 중간 인덱스 + 1로 업데이트해요. |
| 65 | + |
| 66 | +원리는 똑같아여. 찾는값이 중간값보다 큰 지점에 있으니까 왼쪽을 다 버리는거에여. |
| 67 | + |
| 68 | +그 다음 중간값의 인덱스 업데이트하고 위 과정을 계속 반복해요. |
| 69 | + |
| 70 | +```ts |
| 71 | +if (arr[middle] === elem) { |
| 72 | + return middle |
| 73 | +} |
| 74 | + |
| 75 | +return -1 |
| 76 | +``` |
| 77 | + |
| 78 | +이 후 값을 찾으면 해당 값이 있는 인덱스를 반환하구, 없으면 -1을 반환해요. |
0 commit comments