[백준] 1920. 수 찾기 (Python)

·2022년 3월 16일

1. 무지성 접근 (시간초과)

N = int(input())
Arr = list(map(int, input().split()))
M = int(input())
Find = list(map(int, input().split()))
for f in Find:
    if f in Arr:
        print(1)
    else:
        print(0)

Time Complexity: O(n^2)
Find 내부 원소 f에 대해 Arr을 순회
시간초과 발생

2. Binary Search 알고리즘 적용

N = int(input())
Arr = list(map(int, input().split()))
M = int(input())
Find = list(map(int, input().split()))
Arr.sort()

def bsearch(target):
    """
        target: number to find in Arr
        return: None
            print 1 if target in Arr
            print 0 if target not in Arr
    """
    start = 0
    end = N-1
    while start<=end:
        mid = (start+end)//2
        if Arr[mid]==target:
            print(1)
            return
        elif Arr[mid]<=target:
            start = mid+1
        else:
            end = mid-1
    print(0)
    return

for f in Find:
    bsearch(f)

Time Complexity: O(nlogn)
Binary Search의 Time Complexity는 log n
Find 내부 원소에 대해 bsearch 진행 - n log n

profile
튼튼

0개의 댓글