본문 바로가기

스터디 1일 1커밋

240203. [BOJ/백준] 10815. 숫자 카드

 

 

10815번: 숫자 카드 (acmicpc.net)

 

10815번: 숫자 카드

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

www.acmicpc.net


 

첫번째 시도 - 이진탐색

#숫자카드

#이진탐색 함수
def binary_search(a, key):
    # global N
    start = 0
    end = N-1
    while start <= end:
        middle = (start+end)//2
        if a[middle] == key:     #검색 성공
            return 1
        elif a[middle] > key:
            end = middle-1
        else:
            start = middle+1
    return 0                     #검색 실패



N = int(input())
data = list(map(int, input().split()))
M = int(input())
get = list(map(int, input().split()))


#비교대상 정렬
for j in range(N-1, 0 ,-1):
    for i in range(len(data)-1):
        if data[i] > data[i+1]:
            data[i], data[i+1] = data[i+1], data[i]

#상근이가 갖고 있는 카드를 비교대상과 이분탐색으로 결과 도출
for j in get:
    print(binary_search(data, j), end=' ')

 

두번째 시도

N = int(input())
data = list(map(int, input().split()))
M = int(input())
get = list(map(int, input().split()))


empty_list = []
for i in get:
    for j in data:
        if i == j:
            empty_list.append(1)
            break
        else:
            continue
    else:
        empty_list.append(0)

print(*empty_list)

 


결과


코드를 변경하며 길이는 짧아졌지만 결과는 둘다 시간 초과가 되었다.. 뭐가 문제인지는 모르겠다