Algorithm/1일 1코테

[💕 LeetCode Python] 704. Binary Search

대인보우 2020. 10. 26. 14:27
반응형

리트코드

[ 704. Binary Search ]


문제 및 문제설명

leetcode.com/problems/binary-search/submissions/

 

Binary Search - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

내가 제출한 답

def search(self, nums: List[int], target: int) -> int:
        if any(i == target for i in nums): # target이랑 같은 값이 있으면
            return nums.index(target) #해당 인덱스 출력
        else: #없으면
            return -1

하지만 실제 코테에서 이진검색을 요구했을 때 이렇게 풀면 감점당할 수 있다고 한다.

 

이진검색을 활용한 풀이

#이진검색 1 - 재귀
def search(self, nums: List[int], target: int) -> int:
        def binary_search(left, right):
            if left <= right:
                mid = (left+right)//2
                
                if nums[mid] < target:
                    return binary_search(mid+1, right)
                elif nums[mid] > target:
                    return binary_search(left, mid-1)
                else:
                    return mid
            else:
                return -1
                
        return binary_search(0, len(nums)-1)
# 이진검색2 - for문
def search(self, nums: List[int], target: int) -> int:
        
        left, right = 0, len(nums)-1
        
        while left <= right:
            mid = (left+right)//2
            
            if nums[mid] < target:
                left = mid+1
            elif nums[mid] > target:
                right = mid-1
            else:
                return mid
        return -1
# 이진검색 - bisect 패키지 사용
def search(self, nums: List[int], target: int) -> int:
        index = bisect.bisect_left(nums, target)
        
        if index < len(nums) and nums[index] == target:
            return index
        else:
            return -1
# 이진 검색을 사용하지 않는 인덱스 풀이
def search(self, nums: List[int], target: int) -> int:
        try:
            return nums.index(target)
        except ValueError:
            return -1

 

반응형