본문 바로가기
  • 비둘기다
  • 비둘기다
  • 비둘기다
코딩테스트/baekjoon

[이분 탐색] 백준 10815번 (파이썬) : 숫자 카드

by parzival56 2023. 4. 5.

이 문제 같은 경우에는 카드를 하나하나 비교해야 하기 때문에 이분 탐색을 사용합니다. 

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를 활용하여 입력과 동시에 정렬시켰습니다.

그 후 이분 탐색 함수를 만들어 해결하였습니다.

댓글