알고리즘 공부

[백준 10815번] 숫자 카드 python

gyk7 2024. 8. 1. 01:48

 

[처음 시도]

N = int(input())
li1 = sorted(list(map(int, input().split())))

M = int(input())
li2 = list(map(int, input().split()))

# print(li1)
for i in li2 :
    if i in li1 :
        print(1, end=' ')
    else :
        print(0, end=' ')

 

-> 시간 초과 발생

 

[맞은 코드]

N = int(input())
li1 = list(map(int, input().split()))

M = int(input())
li2 = list(map(int, input().split()))
li1.sort()
# print(li1)
for i in li2 :
    lt, rt = 0, N-1
    isExist = False
   
    while lt <= rt :
        mid = (lt + rt) //2
        if i == li1[mid]:
            isExist=True
            print(1, end = ' ')
            break
        elif i > li1[mid] :
            lt = mid + 1
        else :
            rt = mid - 1
   
    if not isExist :
        print(0, end = ' ')

 

혹시나 하고 이중탐색으로 코드 구현을 해보았더니 성공!

이중탐색을 해야만 하는 문제였다.