동빈이네 전자매장에는 부품이 N개 있다. 각 부품은 정수 형태의 고유한 번호가 있다.
어느날 손님이 M개 종류의 부품을 대량으로 구매하겠다며 당일 날 견적서를 요청했다.
동빈이는 때를 놓치지 않고 손님이 문의한 부품 M개 종류를 모두 확인해서 견적서를 작성해야 한다.
이때 가게 안에서 부품이 모두 있는지 확인하는 프로그램을 작성해보자.
입력조건
- 첫째 줄에 정수 N이 주어진다. (1 <= N <= 1000000)
- 둘째 줄에는 공백으로 구분하여 N개의 정수가 주어진다. 이떄 정수는 1보다 크고 1000000이하이다.
- 셋째 줄에는 정수 M이 주어진다. (1 <= M <= 100000)
- 넷째 줄에는 공백으록 구분하여 M개의 정수가 주어진다. 이때 정수는 1보다 크고 10억 이하이다.
출력조건
- 첫째 줄에 공백으로 구분하여 각 부품이 존재하면 yes, 없으면 no를 출력한다.
def binary_search(arr, var, low, high):
middle = int((low + high) / 2)
# low 가 high를 추월하면 더이상 탐색 불가
if low > high:
return -1
if var == arr[middle]:
return middle
elif var > arr[middle]:
return binary_search(arr, var, middle + 1, high)
elif var < arr[middle]:
return binary_search(arr, var, low, middle - 1)
else:
return -1
N = int(input())
parts = list(map(int, input().split()))
M = int(input())
con_parts = list(map(int, input().split()))
# 부품들을 먼저 정렬을 해놔야 이진탐색이 가능하다.
parts.sort()
# 손님이 요구한 부품 확인
for i in con_parts:
if binary_search(parts, i, 0, N - 1) == -1:
print("no")
else:
print("yes")
Tip
- 바이너리 서치 할때는 반드시 서치할 배열이 정렬되어 있어야 한다.
'알고리즘 > 이진탐색' 카테고리의 다른 글
숫자카드 - 백준 알고리즘 10816번 (0) | 2020.09.23 |
---|---|
숫자카드 - 백준알고리즘 10815번 (0) | 2020.09.23 |
떡볶이 떡 만들기 - 이것이 취업을 위한 코딩테스트다. (예제 7- 8) (0) | 2020.09.21 |