이진 탐색 알고리즘

짱J·2022년 11월 7일
0

알고리즘

목록 보기
2/11
post-thumbnail

이것이 취업을 위한 코딩 테스트다를 참고하여 작성하였습니다.

: 배열 내부의 데이터가 정렬되어 있어야만 사용할 수 있는 알고리즘

  • 데이터가 무작위일 때는 사용할 수 없지만, 이미 정렬되어 있다면 매우 빠르게 데이터를 찾을 수 있음
  • 탐색 범위를 절반씩 좁혀가며 데이터를 탐색

  • 시작점, 끝점, 중간점 - 위치를 나타내는 3가지 변수 필요
  • 찾으려는 데이터와 중간점 위치의 데이터를 반복적으로 비교

  • 시간 복잡도 - O(log N)
    • 한 번 확인할 때마다 확인하는 원소의 개수가 절반씩 줄어듦

이진 탐색 구현

재귀 함수

def binary_search(array, target, start, end):
	if start > end:
    	return None
	mid = (start + end) // 2
    
    if array[mid] == target:
    	return mid
        
    elif array[mid] > target:
    	binary_search(array, target, start, mid - 1)
        
    else:
    	binary_search(array, target, mid + 1, end)

반복문

def binary_search(array, target, start, end):
	while start <= end:
    	mid = (start + end) // 2
        if array[mid] == target:
        	return mid
        elif array[mid] > target:
        	end = mid - 1
        else:
        	start = mid + 1
       return None

코딩테스트에서의 이진 탐색

코딩 테스트의 이진 탐색 문제는 탐색 범위가 큰 상황에서의 탐색을 가정하는 문제가 많다.
탐색 범위가 2,000만을 넘어가면 이진 탐색으로 문제에 접근해보자.

profile
[~2023.04] 블로그 이전했습니다 ㅎㅎ https://leeeeeyeon-dev.tistory.com/

0개의 댓글