알고리즘/백준

[백준] 10815번, 숫자 카드 (Python)

wookcode 2021. 7. 27. 20:42
728x90
반응형

문제

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

 

10815번: 숫자 카드

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

www.acmicpc.net

 

코드

n = int(input())
answer = list(map(int, input().split()))

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

answer.sort()
result = []

for target in check:
    l = 0
    r = len(answer)-1
    while l <= r:
        mid = (l + r) // 2
        if target == answer[mid]:
            result.append(1)
            break
        if answer[mid] < target:
            l = mid + 1
        elif answer[mid] > target:
            r = mid - 1
    else:
        result.append(0)
for i in result:
    print(i, end=' ')

범위가 크므로 이분탐색으로 풀어야하는 문제이다.

이분탐색은 정렬되어 있어야 사용할 수 있으므로 answer로 받은 리스트를 정렬시켜준다.

 

target을 찾을경우 result에 1을 추가하고 만약 while문에서 break문으로 동작이 멈추지 않았다면 (result에 1을 추가하지 않은 경우) target을 못찾았다는 뜻이니까 result에 0을 추가하면 된다.

반응형