-
[python] 이진탐색코딩테스트 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)
프로그램에서 데이터를 정렬해두는 경우가 많으므로 이진탐색을 효과적으로 사용 할 수 있다.
복잡하지 않지만 자주 사용하는 방식이니까 자주 연습하자~
'코딩테스트' 카테고리의 다른 글
[Java] 프로그래머스_삼각달팽이 (0) 2023.06.30 [python] DFS / BFS (0) 2023.04.28 [Python] 정렬 알고리즘 - 선택, 삽입, 퀵, 계수 (0) 2023.04.27 [python] 코딩테스트를 위한 python 문법 정리(2) (0) 2023.04.27 [python] 코딩테스트를 위한 python 문법 정리(1) (0) 2023.04.27