lst = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # 오름차순으로 정렬된 상태
num = 7 # 정렬된 상태를 유지하며 배열에 추가할 요소
left = 0 # 왼쪽 기준 인덱스
right = len(lst)-1 # 오른쪽 기준 인덱스
while left<=right:
mid = (left + right)//2
if lst[mid]>= num:
right = mid - 1
result = mid
else:
left = mid + 1
print(result) # 7
각 양끝의 인덱스를 기준으로 잡고 가운데 인덱스를 비교값을 삼아 범위를 반씩 줄여나가는 방식
절반씩 범위를 줄여가기에 O(logN)이 성립!
bisect - bisect_left / bisect_right
위의 이분탐색을 편하게 할 수 있게 해주는 모듈
bisect_left(배열, 넣을 요소) : 정렬된 상태를 유지하며 넣을 요소를 삽입할 가장 앞쪽(왼쪽) 인덱스를 반환
bisect_right(배열, 넣을 요소) : 정렬된 상태를 유지하며 넣을 요소를 삽입할 가장 뒤쪽(오른쪽) 인덱스를 반환
댓글