[알고리즘] 이진 탐색에 대해 잠깐 알아보자
2023. 9. 16. 10:18ㆍTrip to Cote
시작점과 끝점이 있고 중간을 찾는다. 인덱스 값을 비교해서 가까운 쪽으로 범위를 재설정해 먼쪽은 버린다.
로그 복잡도를 가지고 각 단계 마다 탐색 범위를 2로 나누는 것으로 이해할 수 있다.
매우 넓은 억 단위 이상 탐색 범위에서 최적의 해를 찾아야 하는 경우
데이터를 정렬
// 이진 탐색 소스코드 구현(재귀 함수)
function binarySearch(arr, target, start, end) {
if (start > end) return -1;
let mid = parseInt((start + end) / 2);
if (arr[mid] == target) return mid;
else if (arr[mid] > target) return binarySearch(arr, target, start, mid - 1);
else return binarySearch(arr, target, mid + 1, end);
}
// n(원소의 개수)와 target(찾고자 하는 값)
let n = 10;
let target = 7;
arr = [1, 3, 5, 7, 9, 13, 15, 17, 19];
// 이진 탐색 수행 결과 출력
let result = binarySearch(arr, target, 0, n - 1);
if (result == -1) console.log("원소가 존재하지 않습니다.");
else console.log(`${result + 1}번째 원소입니다.`);
한 뒤에 다수의 쿼리를 날려야 하는 경우 사용한다.
처음에 이해가 안되었던 부분이 아무리 못찾아도 start가 end보다 클 수 있나 싶었는데 역시 chatGPT는 똑똑했다.

'Trip to Cote' 카테고리의 다른 글
[백준/node.js] 1654번 랜선 자르기 (왜 안될까..?) (0) | 2023.09.25 |
---|---|
node.js 메서드에 대해 알아보자 (0) | 2023.09.12 |
[백준/node.js] 18870번 좌표 압축 (0) | 2023.08.20 |
[백준/node.js] 1181번 단어 정렬 (0) | 2023.08.20 |
[백준/node.js] 15624번 피보나치 수 7 (못 풀었음) (0) | 2023.08.11 |