Algorithm (PS)

[백준] 10815 숫자카드 in Python : 이진탐색으로 시간단축하기

minjiwoo 2022. 2. 25. 09:54
728x90

https://www.acmicpc.net/problem/10815

 

10815번: 숫자 카드

첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10,

www.acmicpc.net

 

이진탐색의 시간 복잡도는 O(logN)으로 선형탐색 O(n) 을 사용할 때보다 시간을 단축할 수 있다 

# 10815 숫자카드

n = int(input())
card = list(map(int, input().split()))
m = int(input())
find = list(map(int, input().split()))
card.sort()

def bisect(left, right, target):

    if left > right:
        return None
    mid = (left + right) // 2
    if target == card[mid]:
        return mid
    elif card[mid] < target:
        return bisect(mid+1, right, target)
    else:
        return bisect(left, mid - 1, target)

for i in find:
    result = bisect(0, n-1, i)
    if result == None:
        print('0',end=' ')
    else:
        print('1', end=' ')
728x90