오름차순으로 정렬된 배열에서 원하는 숫자(target)을 찾는 알고리즘
- 배열 전체의 중간값을 target 값과 비교
- 중간값이 target 값보다 크면 왼쪽 부분만 선택
- 왼쪽부분의 중간값을 다시 target 과 비교
target = 25
m_list = [30, 94, 27, 92, 21, 37, 25, 47, 25, 53, 98, 19, 32, 32, 7]
length = len(m_list)
m_list.sort()![](https://velog.velcdn.com/images/joon6093/post/b51d5474-f876-4336-9685-e93f70e439b7/image.png)
left = 0
right = length-1
while left<=right:
mid = (left+right)//2
if m_list[mid] == target:
print(mid+1)
break
elif m_list[mid]>target:
right = mid-1
else :
left = mid+1
def binarySearch(array, target, left, right):
middle_idx = (left+right)//2
print(middle_idx)
middle = array[middle_idx]
if target == middle:
print('answer {}'.format(middle_idx))
elif middle > target:
binarySearch(array, target,left,middle_idx-1)
elif middle < target:
binarySearch(array, target,middle_idx+1,right)
else:
return False
target = 25
m_list = [30, 94, 27, 92, 21, 37, 25, 47, 25, 53, 98, 19, 32, 32, 7]
length = len(m_list)
m_list.sort()
left = 0
right = length-1
binarySearch(m_list,target,0,right)
bisect.bisect_right(정렬된 리스트, target)
정렬된 리스트에서 target을 insert할때의 위치+1
※ bisect.bisect는 bisect.bisect_right와 동일함
bisect.insert()
bisect함수와 동일하게 작동하고 해당 인덱스에 값을 삽입을 해준다.
import bisect
a = [1,2,3,4,5]
x = 3
b = bisect.bisect_left(a,x)
2와 3 사이 인덱스인 2반환
c = bisect.bisect_right(a,x)
3과 4 사이 인덱스인 3반환
정렬된 리스트에서 특정 값이 몇번 등장하는지 확인
bisect.bisect_right(a, right) - bisect.bisect_left(a, left)
https://roytravel.tistory.com/331
https://baek.dev/til/algorithm/binary-search
https://kangworld.tistory.com/65