N= int(input())
num_list = list(map(int, input().split()))
M = int(input())
test_case = list(map(int, input().split()))
num_list.sort() #타겟 리스트를 정렬
def bs(num_list, start, end, num):
mid = (start + end)//2
if num_list[mid] == num:
return 1
if start > end:
return 0
if num_list[mid] > num: #중간 값이 찾고자 하는 값보다 크면 앞쪽을 찾으면 된다.
answer = bs(num_list, start, mid-1, num)
if num_list[mid] < num:#중간 값이 찾고자 하는 값보다 작으면 뒤쪽을 찾으면 된다.
answer = bs(num_list, mid+1, end, num)
return answer
start = 0
end = N-1
answer =[]
for num in test_case:
answer.append(bs(num_list, start, end, num))
print(' '.join(map(str, answer)))
전형적인 이분 탐색 문제
'Algorithm > 백준 온라인 저지(BOJ)' 카테고리의 다른 글
[BOJ] 4963 섬의 개수 파이썬 (0) | 2021.03.07 |
---|---|
[BOJ] 11053 LIS 가장 긴 증가하는 수열 (0) | 2021.03.02 |
[BOJ] 나무자르기 - 이분탐색 (0) | 2021.02.16 |
[BOJ] 1920 수 찾기 파이썬 (0) | 2021.02.15 |
09/04 캐슬 디펜스 BOJ 17135 파이썬 (0) | 2020.09.04 |