[리트코드] 704. Binary Search

2022. 3. 14. 08:45Python/코딩 문제

# 문제 설명

오름차순으로 정렬된 정수 배열 nums 와 정수 target 이 주어질 때, nums에서 target 값을 찾는 함수를 구현해라.

만약 target 값이 존재한다면, 그 index를 반환한다. 그렇지 않으면 -1 을 반환한다.

실행시간 복잡도는 O(log n) 의 알고리즘 이어야 한다.

 

# 입출력 예시

입력 출력
nums = [-1,0,3,5,9,12]
target = 9
4
nums = [-1,0,3,5,9,12]
target = 2
-1

 

# 코드 풀이 1.  재귀 풀이

class Solution:
    def search(self, nums: List[int], target: int) -> int:
        def bisearch(left, right):
            if left > right:
                return -1
            
            mid = (left+right)//2
            if nums[mid]==target:
                return mid
            elif nums[mid] < target:
                return bisearch(mid+1, right)
            else:
                return bisearch(left, mid-1)
            
        return bisearch(0, len(nums)-1)

 

# 코드 풀이 2.  반복문 풀이

class Solution:
    def search(self, nums: List[int], target: int) -> int:
        left, right = 0, len(nums)-1
        while True:
            if left > right:
                return -1
            
            mid = (left+right)//2
            if nums[mid]==target:
                return mid
            elif nums[mid] < target:
                left = mid+1
            else:
                right = mid-1

 

# 코드 풀이 3.  예외처리 풀이

class Solution:
    def search(self, nums: List[int], target: int) -> int:
        try:
            return nums.index(target)
        except ValueError:
            return -1

 

 

# 핵심 포인트

  • Python 에는 이진 검색 알고리즘을 지원하는 bisect 모듈이 있다. 이를 사용하여 풀 수도 있다.
  • try ~ except 구문으로 예외처리를 수행할 수 있다.

 

 

 

 

 

 

Hola

반응형

'Python > 코딩 문제' 카테고리의 다른 글

[SWEA] 5209. 최소 생산 비용  (0) 2022.03.17
[백준] 19942. 다이어트  (0) 2022.03.16
[백준] 13398. 연속합 2  (0) 2022.03.10
[리트코드] 662. 이진트리의 최대 너비  (0) 2022.03.08
백준 3977. 축구 전술  (0) 2022.03.04