알고리즘/Binary Search

백준 1920 파이썬(이분탐색)

Aytekin 2021. 12. 15. 18:12
728x90

이진탐색(binary search)를 통해서 풀 수 있는 문제다.

 

이진탐색을 사용할 수 있는 조건은 배열이 정렬이 된 상태에서 사용할 수 있다.

또한 이진탐색은 순차적으로 탐색하는 방법보다 훨씬 빠르게 원하는 값을 찾아낼 수 있다.

시간복잡도 -> O(logN)

탐색해야하는 숫자의 수가 절반씩 줄어들기 때문에!

 

이진탐색은 반복문 말고도 재귀를 사용하여 구현할 수 있다.

두가지 모두 알아두고 구현해낼 수 있도록 연습해야겠다. 

# 1920 수 찾기

n = int(input())
list_n = list(map(int, input().split()))
list_n.sort()
m = int(input())
list_m = list(map(int, input().split()))

# 반복문을 이용한 이진탐색
def binary_search(data,target):
    start = 0
    end = len(data) - 1

    while start <= end:
        mid = (start + end) // 2
        
        if data[mid] == target:
            return mid+1
        elif data[mid] < target:
            start = mid + 1
        else:
            end = mid - 1
    return None

for target in list_m:
    if binary_search(list_n,target):
        print(1)
    else:
        print(0)
728x90

'알고리즘 > Binary Search' 카테고리의 다른 글

백준 10815 파이썬(이분탐색)  (0) 2022.02.05