이분탐색

가연·2023년 3월 13일
1

기본 유형

import sys
N = int(input())
my_cards = list(map(int, sys.stdin.readline().split()))
M = int(input())
your_cards = list(map(int, sys.stdin.readline().split()))
# list(map(int, sys.stdin.readline().rstrip())) 로 해주면 input보다 빠르다고 함.
# array 는 오름차순으로 정렬해주기~
my_cards.sort()


def binary(array, target, start, end):
    if start > end:  # 첫번째 인덱스가 마지막 인덱스보다 커지면 종료
        return None
    while start <= end:
        mid = (start + end)//2  # 중간 인덱스 설정(소수점 나오면 안되니깐 몫만 나오게하기)
        if array[mid] == target:  # 배열의 가운데가 찾고자 하는 것과 같으면 종료.(찾은거니깐)
            return mid
        elif array[mid] > target:  # 배열의 가운데가 찾고자하는것보다 크면 찾고자 하는게 가운데보다 왼쪽에 있다는것
            # 이므로 end=mid-1 로 설정 후 재귀
            return binary(array, target, start, mid - 1)
        else:
            return binary(array, target, mid + 1, end)


for i in range(M):
    result = binary(my_cards, your_cards[i], 0, N-1)
    if result == None:
        print("0", end=" ")
    else:
        print("1", end=" ")

1개의 댓글

comment-user-thumbnail
2023년 5월 15일

잘 보고 갑니다.
이 글도 한번 읽어보세요!
https://www.acmicpc.net/blog/view/109

답글 달기