def binary_search(element, some_list):
    start = 0
    end = len(some_list) - 1
    
    while start <= end:
        mid = (start + end) // 2
        if element == some_list[mid]:
            return mid
        elif element < some_list[mid]:
            end = mid - 1
        else:
            start = mid + 1
        
    return None

print(binary_search(2, [2, 3, 5, 7, 11]))
print(binary_search(0, [2, 3, 5, 7, 11]))
print(binary_search(5, [2, 3, 5, 7, 11]))
print(binary_search(3, [2, 3, 5, 7, 11]))
print(binary_search(11, [2, 3, 5, 7, 11]))
  1. 탐색하고자 하는 리스트의 startIndex, endIndex 값 지정
  2. while 반복문
    1. midIndex 값 지정 : startIndex와 endIndex를 더한 값의 절반값 (소수부분 제거)
    2. 찾고자 하는 값과 리스트에서 midIndex에 해당하는 값 비교
    3. 리스트의 중간값과 찾고자 하는 값이 일치하면 해당 midIndex 리턴
    4. 리스트의 중간값보다 찾고자 하는 값이 크면 리스트의 중간지점보다 왼쪽 부분에는 찾고자 하는 값이 없을 것이므로, startIndex 값을 midIndex+1 값으로 바꿔준다. (왼쪽 부분 제외하기)
    5. 리스트의 중간값보다 찾고자 하는 값이 작으면 리스트의 중간지점보다 오른쪽 부분에는 찾고자 하는 값이 없을 것이므로, endIndex 값을 midIndex - 1 값으로 바꿔준다. (오른쪽 부분 제외하기)
    6. 계속 반복하다보면 결국 start 값과 end 값이 겹치거나 교차하는 상황이 발생할 것이고, 그렇게 되면 while 반복문이 종료되도록 한다. ⇒ while문의 조건문으로 지정
  3. while 문이 종료되었다면 값을 찾지 못한 상태이므로 None 리턴