Base Line/알고리즘
이진 탐색
ylab
2022. 2. 22. 15:23
출처 : 이코테
순차탐색이란
리스트 안에 있는 특정한 데이터를 찾기 위해
앞에서부터 데이터를 하나씩 차례대로 확인하는 방법
def sequential_search(n,target,array):
for i in range(n):
if array[i]== target:
return i + 1
print("생성할 원소 개수를 입력한 다음 한 칸 띄고 찾을 문자열을 입력하세요.")
input_data = input().split()
n = int(input_data[0])
target = input_data[1]
array = input().split()
print(sequential_search(n,target,array))
이진 탐색
반으로 쪼개면서 탐색하기
변수 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
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)
저자분께서 어느정도 암기를 해놓으라고 하신 부분이다
반복 타이핑으로 암기하자 ㅎ
팁은
탐색 범위 2000만 넘기면 이진 탐색 고려