[python] bisect - 배열 이진 분할 알고리즘

Dawon Seo·2023년 6월 17일
0

bisect

  • 이진 탐색을 쉽게 구현하게끔 해주는 함수입니다.
  • 원소들이 정렬된 리스트에서 특정 원소를 찾을 때 효과적입니다.

bisect_left(iterable, value): 왼쪽 인덱스 구하기
bisect_right(iterable, value): 오른쪽 인덱스 구하기

from bisect import bisect_left, bisect_right

nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
n = 5

print(bisect_left(nums, n))
print(bisect_right(numbs, n))

'''
5
6
'''
from bisect import bisect_left, bisect_right

nums = [4, 5, 5, 5, 5, 5, 5, 5, 5, 6]
n = 5

print(bisect_left(nums, n))
print(bisect_right(nums, n))


'''
1
9
'''

응용: 특정 범위 내에 속하는 원소 개수 구하기

from bisect import bisect_left, bisect_right

# [left_v, right_v] 범위 내에 있는 원소 개수 출력 함수
def cnt_within_range (arr, left_v, right_v):
    # 맨 좌측 인덱스
    left_idx = bisect_left(arr, left_v)
    # 맨 우측 인덱스
    right_idx = bisect_right(arr, right_v)
    return right_idx - left_idx

# 리스트 생성
arr = [5, 6, 7, 7, 7, 7, 8, 8, 9, 10]

# 값이 9인 원소 개수 출력
print(cnt_within_range(arr, 9, 9)) # 1
# [4, 7] 범위 내에 있는 원소 개수 출력
print(cnt_within_range(arr, 4, 7)) # 6

0개의 댓글