백준 문제풀이

[백준 10815번 문제] 숫자카드

eunda_coding 2022. 5. 20. 15:41

이번 문제는 입력받은 숫자가 내가 가지고 있는 숫자중에 있는지 없는지 판별하는 문제다.

그래서 배열 두개에  숫자를 입력받고 for문으로 돌려서 조건문으로 판별하려고 했었는데 시간초과가 떴다ㅜ

요즘엔 문제는 풀리는데 시간초과가 많이 뜨는거같다ㅜ

 

num = int(input())
sanggeun = list(map(int,input().split()))

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


for i in range(len(nums)):
    if nums[i] in sanggeun:
        nums[i] = 1
    else:
        nums[i] = 0

for i in nums:
    print(i, end=' ')

처음 방식으로 푼 코드인데 시간초과가 떠서 다른 사람들은 어떻게 풀었나 보니깐 이분 탐색법으로 풀어야 하는 문제였다.

def binary_search(num):
    l = 0
    r = n -1
    while l <= r:
        mid = (l + r)//2
        if sanggeun[mid] == num:
            return 1
        elif sanggeun[mid] > num:
            r = mid -1
        else:
            l = mid + 1
    return 0

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

m = int(input())
nums = list(map(int,input().split()))
sanggeun.sort()

for i in nums:
    print(binary_search(i), end = ' ')

 

그래서 이분탐색 알고리즘을 보고 다시 구현해보았다.