코딩테스트
[python] 이진탐색
ye11
2023. 4. 27. 20:31
2023.04.27 - [코딩테스트] - [Python] 정렬 알고리즘 - 선택, 삽입, 퀵, 계수
[Python] 정렬 알고리즘 - 선택, 삽입, 퀵, 계수
1. 선택 정렬 Selection Sort : 가장 작은 데이터를 선택하여 맨 앞으로 보내고 그 다음 작은 데이터를 선택해서 두번째 데이터와 바꾸는 과정 시간복잡도 : O(n^2) 많이 느리다 a = [7,5,9,0,3,1,6,2,4,8] for i
yellog03.tistory.com
저번에 정렬 알고리즘에 이어서 이진탐색에 대해 알아보자..
이진탐색은 배열 내부의 데이터가 정렬되어있어야만 사용할 수 있다.
이진 탐색은 탐색 범위를 절반씩 좁혀가며 데이터를 탐색하므로 시간을 매우 단축시킬 수 있다.
시간복잡도는 O(log N)
1. 재귀함수를 이용한 이진탐색 구현
def binary_search(array,target,start,end):
if start>end:
return None
mid = (start+end)//2 #소수점 버린다
if array[mid]>target: #기준이 타겟보다 크면 왼쪽만 탐색
return binary_search(array,target,start,mid-1)
if array[mid]<target: #반대면 오른쪽만 탐색
return binary_search(array,target,mid+1,end)
if array[mid] == target: #값 찾음
return mid
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)
2. 반복문을 이용한 이진탐색 구현
def binary_search(array,target,start,end):
while start<=end:
mid = (start+end)//2
if array[mid]==target:
return mid
if array[mid] > target:
end = mid-1
if array[mid] < target :
start = mid +1
return None
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)
프로그램에서 데이터를 정렬해두는 경우가 많으므로 이진탐색을 효과적으로 사용 할 수 있다.
복잡하지 않지만 자주 사용하는 방식이니까 자주 연습하자~