728x90
-순환 호출을 이용한 이진 탐색
# 백준 집합과 맵 : 10815번 - 숫자 카드
# 이진 탐색 이용
def search_binary(list, key, low, high):
if low <= high:
mid = (low + high) // 2
if key == list[mid]:
return mid
elif key < list[mid]:
return search_binary(list, key, low, mid - 1)
else:
return search_binary(list, key, mid + 1, high)
return -1
n = int(input()) # 가지고 있는 숫자 카드 개수
num = list(map(int, input().split())) # 숫자 카드에 적혀있는 정수
m = int(input())# 구별할 숫자 카드 개수
guess_num = list(map(int, input().split())) # 구별할 숫자 카드에 적혀있는 정수
# 리스트 정렬하기
num.sort()
for i in guess_num:
if search_binary(num, i, 0, n - 1) == -1: # 포함되지 않은 경우
print(0, end=' ')
else: # 포함된 경우
print(1, end=' ')
이번엔 시간초과를 고려해서 순환 호출을 이용한 이진 탐색을 이용했다.
근데 반복 이용한 이진탐색하는게 더 간단했을 것 같아서 다시 수정해보았다.
-반복을 이용한 이진 탐색
# 백준 집합과 맵 : 10815번 - 숫자 카드
# 반복을 이용한 이진 탐색 이용
def search_binary(list, key, low, high):
while low <= high:
mid = (low + high) // 2
if key == list[mid]:
return mid
elif key < list[mid]:
high = mid - 1
else:
low = mid + 1
return -1
n = int(input()) # 가지고 있는 숫자 카드 개수
num = list(map(int, input().split())) # 숫자 카드에 적혀있는 정수
m = int(input())# 구별할 숫자 카드 개수
guess_num = list(map(int, input().split())) # 구별할 숫자 카드에 적혀있는 정수
# 리스트 정렬하기
num.sort()
for i in guess_num:
if search_binary(num, i, 0, n - 1) == -1: # 포함되지 않은 경우
print(0, end=' ')
else: # 포함된 경우
print(1, end=' ')
'Algorithm > Baekjoon' 카테고리의 다른 글
| #백준 11659, 파이썬, PyPy3와 Python3 차이점 (0) | 2022.09.27 |
|---|---|
| #백준 2559, 파이썬, 리스트 슬라이싱 : (0) | 2022.09.26 |
| #백준 2750, 파이썬, 리스트 정렬하기, sort(), sorted() 함수 (0) | 2022.09.04 |
| #백준 1436, 파이썬, in 연산자 (0) | 2022.08.26 |
| #백준 7586, 파이썬, 리스트 (0) | 2022.08.26 |