- 배열과 정수를 입력받아 해당 인덱스에 대한 해당 정수의 인덱스를 리턴한다.
for문을 이용한 문제해결
function findIndex(arr, target) {
for(let i=0; i<arr.length; i++) {
if(arr[i] === target) {
return i;
}
}
return -1;
}
이진 탐색 트리를 이용한 문제해결
- 이진 탐색 트리를 위해서 오름차순으로 정렬이 필요하다.
- 일반적으로 배열을 세 등분해서 제일 처음을 left 제일 끝을 right 가운데를 mid로 한다.
- target과 arr[mid]를 비교해서 target이 더 큰 경우 left를 mid + 1로, target이 더 작은 경우 right를 mid - 1로 줄여나가면서 범위를 좁힌다.
- 시간복잡도는 O(logN)이다.
function findIndex(arr, target) {
arr = arr.sort((a, b) => a-b);
// 배열의 제일 처음 인덱스를 left로 한다.
let left = 0;
// 배열의 제일 마지막 인덱스를 right로 한다.
let right = arr.length - 1;
// rightrk left보다 크거나 같을때까지 계속 돌린다.
while(left <= right) {
// left와 right 가운데를 mid로 해준다. (내림을 하든 올림을 하든 자유)
let mid = Math.floor((left / right) / 2);
// target이 arr[mid]와 같으면 mid를 리턴해주면 된다.
if(target === arr[mid]) {
return mid;
}
// target이 큰 경우
if(target > arr[mid]) {
left = mid + 1;
}
// target이 작은 경우
if(target < arr[mid]) {
right = mid - 1;
}
}
return -1;
}