이진 탐색은? (Binary Search)
1. 이진 탐색은 배열 내부의 데이터가 정렬되어 있어야한 사용할 수 있는 알고리즘이다.
2. 이진탐색은 위치를 나타내는 변수 3개를 사용하는데 탐색하고자 하는 범위의 시작점, 끝점, 그리고 중간점이다.
3. 찾으려는 데이터와 중간점 위치에 있는 데이터를 반복적으로 비교해서 원하는 데이터를 찾는게 이진 탐색 과정이다.
재귀로 이진탐색
#이진 탐색 소스코드 구현(재귀 함수)
def binary_search(array, target, start, end):
if start >end:
return None
mid = (start + end)//2
# 중간이 타겟인 경우
if array[mid] == target:
return mid
# 중간보다 타겟값이 작은 경우
elif array[mid]> target:
return binary_search(array,target,start, mid-1)
else:
# 큰경우
return binary_search(array,target,mid +1,end)
n, target =list(map(int, input().split()))
array = list(map(int,input().split()))
result = binary_search(array, target, 0, n-1)
if result == None:
print("원소가 존재하지 않습니다.")
else:
print(result+1)
반복문으로 구현한 이진 탐색
#이진 탐색 소스코드 구현(재귀 함수)
def binary_search(array, target, start, end):
while start <= end :
mid = (start + end)//2
# 중간이 타겟인 경우
if array[mid] == target:
return mid
# 중간보다 타겟값이 작은 경우
elif array[mid]> target:
end = mid - 1
else:
start = mid+1
n, target =list(map(int, input().split()))
array = list(map(int,input().split()))
result = binary_search(array, target, 0, n-1)
if result == None:
print("원소가 존재하지 않습니다.")
else:
print(result+1)
이진 탐색은 알아두고 외워두면 좋다고 한다 꼭 암기해두자
<출처 이것이 코딩테스트다. 저자 나동빈>
반응형
'알고리즘 공부 > 이진탐색' 카테고리의 다른 글
[백준] 10815번 숫자 카드 - 파이썬 (0) | 2022.04.12 |
---|---|
[백준] 1197번 랜선 자르기 - 파이썬 (0) | 2022.04.12 |
[백준] 10816번 숫자 카드 2 - 파이썬 (0) | 2021.08.19 |
[백준] 1920번 수 찾기 - 파이썬 (0) | 2021.08.19 |
이진탐색 "반으로 쪼개면서 탐색하기" (0) | 2021.04.01 |