(Python) BOJ - 1920. 수 찾기

이수현·2021년 2월 22일
0

solved.ac - Class 2

목록 보기
4/4

BOJ - 1564. 랜선 자르기

from typing import List
import sys


def bin_search(num: int, num_arr: List[int]) -> bool:
	# start, end 초기화
    start, end = 0, len(num_arr) - 1
    # start가 end보다는 작거나 같을 때 까지
    while start <= end:
    	# mid 설정
        mid = (start + end) // 2
        # start가 너무 작으므로 갱신
        if num > num_arr[mid]:
            start = mid + 1
        # end가 너무 크므로 갱신
        elif num < num_arr[mid]:
            end = mid - 1
        # 검색 성공
        else:
            return True
    # 검색 실패
    return False


if __name__ == "__main__":
    n = int(sys.stdin.readline())
    a = sorted(list(map(int, sys.stdin.readline().split())))
    m = int(sys.stdin.readline())
    b = list(map(int, sys.stdin.readline().split()))
    for num in b:
        print(1 if bin_search(num, a) else 0)

기본적인 이분 탐색 문제
파이썬 in 연산 사용하면 시간초과가 날 수 밖에 없다...

0개의 댓글