📌 기본적인 이진탐색 문제
이진탐색 알고리즘을 사용할 때 데이터는 정렬된 상태여야 하기 때문에, N개의 정수 A[1], ..., A[N]을 먼저 정렬한다.
리스트 A를 시작점/끝점/중간점으로 나눠 탐색 범위를 절반씩 좁혀가며 데이터를 탐색한다.
찾으려는 데이터와 중간점 위치에 있는 데이터를 반복적으로 비교해서 원하는 데이터를 찾는다.
시간복잡도 O(logN)
이진탐색 재귀함수
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:
retrun binary_search(array, target, start, mid - 1)
# 중간점의 값보다 찾고자 하는 값이 큰 경우 오른쪽 확인
else:
return binary_search(array, target, mid + 1, end)
위의 알고리즘을 사용하면 문제 해결 가능
전체 코드
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 = int(input())
a = list(map(int, input().split()))
m = int(input())
b = list(map(int, input().split()))
cnt = 0
a.sort()
for i in range(m):
result = binary_search(a, b[i], 0, n - 1)
if result == None:
print("0")
else:
print("1")