<내 코드>
n = int(input())
A_num = list(map(int, input().split()))
sorted_A = sorted(A_num)
m = int(input())
M_num = list(map(int, input().split()))
def binary_search(M, sorted_A):
start = 0
end = len(sorted_A)-1
while start <= end:
mid = (start + end) // 2
if(m == sorted_A[mid]):
return print(1)
elif (m > sorted_A[mid]):
start = mid + 1
else:
end = mid - 1
return print(0)
for m in M_num:
binary_search(m, sorted_A)
이분 탐색 알고리즘 문제다. 이분 탐색은 미리 정렬된 리스트에서 값을 찾아나가는 알고리즘이다. 정렬된 자료에서 중앙값을 찾은 다음 찾으려는 값과 비교한다. 중앙값이 더 크면 찾으려는 값이 오른쪽에 있는 것이기에 오른쪽으로 범위를 좁히고, 중앙값이 더 작다면 왼쪽으로 범위를 좁혀 찾아나간다. 비교하는 값이 존재한다면 1을 프린트하고, 없다면 0을 프린트한다.
반응형
'알고리즘 문제풀기 > 백준 - Python' 카테고리의 다른 글
[백준 2748] 피보나치 수 - Python(다이내믹 프로그래밍) (0) | 2020.08.23 |
---|---|
[백준 2805] 나무 자르기 - Python(이분탐색) (0) | 2020.08.21 |
[백준 11866] 요세푸스 순열 - Python (0) | 2020.08.18 |
[백준 1966] 프린터 큐 - Python (0) | 2020.08.17 |
[백준 2164] 카드 2 - Python (0) | 2020.07.25 |