[LeetCode] 35. Search Insert Position

lkdcode·2023년 8월 27일

Algorithm

목록 보기
15/47
post-thumbnail

35. Search Insert Position


문제 분석

배열과 정수 하나가 주어진다.
배열에 정수가 있다면 해당 인덱스를 리턴,
없다면 알맞는 위치에 해당하는 인덱스를 리턴하는 문제.


풀이 과정

주어진 배열은 정렬이 되어있으므로 이분 탐색을 활용하여 값을 절반씩 찾아나간다.
총 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;
    }

profile
되면 한다

0개의 댓글