카테고리 없음

[SWEA][Python] 5207 이진탐색

findTheValue 2021. 10. 2. 02:12

평범한 이진탐색. 대신 번갈아 가면서 탐색하지 않으면 break되게끔 설계(같은 방향 두번 밟으면)

 

for test in range(1, int(input()) + 1):
    N,  M = map(int, input().split())
    A = sorted(list(map(int, input().split())))
    B = list(map(int, input().split()))
    answer = 0
    for num in B:
        left, right, flag = 0, N - 1, 2
        while left <= right:
            mid = (left + right) // 2
            if A[mid] == num:
                answer += 1
                break
            if num < A[mid]:
                right = mid - 1
                if flag == 1: break
                flag = 1
            elif num > A[mid]:
                left = mid + 1
                if not flag: break
                flag = 0
    print(f'#{test} {answer}')