Algorithm

[python] 이진 탐색 bisect 라이브러리

Jaaaay 2022. 7. 19. 19:50

bisect를 통해 이진탐색을 쉽게 구현할 수 있고 관련 기능을 사용할 수 있다.

(그래도 이진탐색 코드 정도는 숙지하고 있도록 하자)

bisect - Array bisection algorithm - Python 3.10.5 documentation

from bisect import *

li = [1, 2, 2, 3, 3, 4]
print(bisect_left(li, 2))  # 1
print(bisect_right(li, 2))  # 3
print(bisect_left(li, 4))  # 5
print(bisect_right(li, 4))  # 6
insort(li, 2)
print(li)  # [1, 2, 2, 2, 3, 3, 4]
  • bisect_left()는 찾고자 하는 값의 맨 처음 인덱스를 반환한다.
  • bisect_left()는 찾고자 하는 값의 맨 마지막 인덱스 + 1 값을 반환한다.
  • insort()를 통해 정렬을 해치지 않고 값을 추가할 수 있다.

ex) 정렬된 리스트에서 특정 값을 가지는 원소의 개수 이진 탐색으로 구하기

from bisect import *

li = [1, 2, 2, 3, 3, 4]
res = bisect_right(li, 2) - bisect_left(li, 2)
print(res)  # 2

O(logN)으로 답을 구할 수 있어 효율적이다.