-코드
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))
'Beakjoon&프로그래머스 > 파이썬' 카테고리의 다른 글
[백준/파이썬]13706번 제곱근 (0) | 2021.10.08 |
---|---|
[백준/파이썬]13777번 Hunt The Rabbit (0) | 2021.10.08 |
[백준/파이썬]10994번 별 찍기 - 19 (0) | 2021.10.06 |
[백준/파이썬]11727번 2×n 타일링 2 (0) | 2021.10.05 |
[백준/파이썬]2960번 에라토스테네스의 체 (0) | 2021.10.04 |