배열과 정수 하나가 주어진다.
배열에 정수가 있다면 해당 인덱스를 리턴,
없다면 알맞는 위치에 해당하는 인덱스를 리턴하는 문제.
주어진 배열은 정렬이 되어있으므로 이분 탐색을 활용하여 값을 절반씩 찾아나간다.
총 3개의 인덱스를 선언한다(startIndex, endIndex, midIndex)
midIndex는 항상 '(startIndex + endIndex) / 2' 값이다.
midIndex에 해당하는 값이라면 midIndex를 리턴
midIndex에 해당하는 값보다 target이 크다면 startIndex를 midIndex+1 로 바꾼다.
midIndex에 해당하는 값보다 target이 작다면 endIndex를 midIndex로 바꾼다.
반복문은 startIndex가 endIndex보다 작을 때까지만 돌고
마지막으로 startIndex를 리턴한다.
배열안에 있는 가장 큰 값보다 target 값이 큰 조건을 리턴할 때 반복문안에서 해결하는 방법이 떠오르지 않아서 상단에 조건문으로 판단한 부분이 아쉬웠다.
public int searchInsert(int[] nums, int target) {
int startIndex = 0;
int endIndex = nums.length - 1;
if (nums[endIndex] < target) return nums.length;
while (startIndex < endIndex) {
int midIndex = (startIndex + endIndex) / 2;
if (nums[midIndex] == target) return midIndex;
if (nums[midIndex] < target) startIndex = midIndex + 1;
if (nums[midIndex] > target) endIndex = midIndex;
}
return startIndex;
}
