본문 바로가기
Beakjoon&프로그래머스/파이썬

[백준/파이썬]2776번 암기왕

by 현장 2021. 10. 7.

-코드

from sys import stdin
input = stdin.readline

def binary(array, target, left, right):
    mid_index = (left + right) // 2
    mid = array[mid_index]
    if left > right:
        return 0
    if target == mid:
        return 1
    elif mid > target:
        return binary(array, target, left, mid_index - 1)
    elif mid < target:
        return binary(array, target, mid_index + 1, right)


for _ in range(int(input())):
    n1 = int(input())
    arr1 = sorted(list(map(int, input().split())))
    n2 = int(input())
    arr2 = list(map(int, input().split()))
    for i in arr2:
        print(binary(arr1, i, 0, n1 - 1))

처음에 이렇게 작성을 하고 입 출력을 비교했으나 시간 초과가 생겼습니다. 그래서 잘못 작성을 했나 pypy3로 제출하니 통과를 해서 틀린 코드는 아닌 거 같은데 하고 찾아보니 다른 분들은 재귀를 while로 처리를 하여 사용하니 통과가 되어서 아래 코드와 같이 변경을 해서 통과하였습니다.

from sys import stdin

def binary(array, target, left, right):
    while left <= right:
        mid = (left + right) // 2
        if target == array[mid]:
            return 1
        if target >= array[mid]:
            left = mid + 1
        else:
            right = mid - 1
    return 0


input = stdin.readline
for _ in range(int(input())):
    n1 = int(input())
    arr1 = sorted(list(map(int, input().split())))
    n2 = int(input())
    arr2 = list(map(int, input().split()))
    for i in arr2:
        print(binary(arr1, i, 0, n1 - 1))