Baekjoon/이분탐색

[백준] 1920 수 찾기 (실버4) / 이분탐색

hellosonic 2023. 5. 28. 23:31

문제요약

나의 코드 및 설명

n = int(input())
a = list(map(int, input().split()))
a.sort() #비교 대상 리스트 정렬 

m = int(input())
b = list(map(int, input().split()))

for x in b:
    start = 0 #시작 : 인덱스 0 
    end = n-1 #끝 : 마지막 인덱스
    ans = False 
    while start <= end: #start>end가 아닐 때까지 
        mid = (start + end) // 2 #중간값을 찾는다.
        if x > a[mid]: #찾는 값이 중간값보다 크다면, 
            start = mid + 1 #다음 반복 시에 중간값 이후의 값 부터 찾는다.
        elif x < a[mid]: #찾는 값이 중간값보다 작다면,
            end = mid - 1 #다음 반복 시에 중간값 이전의 값 부터 찾는다.
        else: #찾는 값이 중간값이라면,
            ans = True #찾는 값이 있으므로 ans = True로 갱신해주고,
            break #반복문을 탈출한다.
    if ans:
        print(1)
    else:
        print(0)

피드백

이분탐색 연습을 위해 풀어본 문제. 문제의 조건에서 탐색 범위가 매우 크게 주어진다면, 이진탐색을 떠올려야 한다.