티스토리 뷰

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을 추가하면 된다.

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30