이 문제 같은 경우에는 카드를 하나하나 비교해야 하기 때문에 이분 탐색을 사용합니다.
N = map(int, input())
my_card = sorted(map(int, input().split()))
M = map(int, input())
num_card = list(map(int, input().split()))
answer = []
def binary(k, my_card, start, end):
mid = (start+end) // 2
if start > end:
answer.append(str(0))
elif k == my_card[mid]:
answer.append(str(1))
elif k > my_card[mid]:
binary(k, my_card, mid+1, end)
else:
binary(k, my_card, start, mid-1)
for k in num_card:
start = 0
end = len(my_card)-1
binary(k, my_card, start, end)
print(' '.join(answer))
이진 탐색을 할 때 가장 중요한 것은 바로 초기 리스트가 정렬되어 있어야 한다는 것입니다. 그래서 위에서 sorted를 활용하여 입력과 동시에 정렬시켰습니다.
그 후 이분 탐색 함수를 만들어 해결하였습니다.
'코딩테스트 > baekjoon' 카테고리의 다른 글
[스택 & 큐] 백준 2164번 (C언어) - 카드2 (0) | 2023.05.09 |
---|---|
[이분 탐색] 백준 2417번 (파이썬) : 정수 제곱근 (0) | 2023.04.07 |
[이분 탐색] 백준 1789번 (파이썬) : 수들의 합 (0) | 2023.04.05 |
[완전 탐색] 백준 5568번 (파이썬) : 카드 놓기 (0) | 2023.03.24 |
[완전 탐색] 백준 14501번 (파이썬) : 퇴사 (0) | 2023.03.17 |
댓글