백준 1920 수 찾기 (이분탐색)

맹민재·2023년 4월 8일
0

알고리즘

목록 보기
48/134
from sys import stdin
input = stdin.readline

n = int(input())
n_list = list(map(int, input().split()))

n_list.sort()

m = int(input())
m_list = list(map(int, input().split()))

for i in m_list:
    s, e = 0, len(n_list)-1
    while s <= e:
        mid = (s+e)//2
        t = n_list[mid]
        if t == i:
            print(1)
            break

        if t > i:
            e = mid -1
        else:
            s = mid + 1
    else:
        print(0)

이분탐색은 정렬된 배열에서 맞는지 아닌지로 답이 나뉘고 거기서 크다 작다로 나뉘는 경우 사용하는 알고리즘

리스트의 mid 값을 비교하며 찾고자 하는 값이 mid 값 보다 크면 시작지점을 mid + 1로 작으면 mid -1로 하여 빠르게 배열을 탐색하는 방법

이렇게 할 시 O(log n)으로 탐색이 가능하다.

profile
ㄱH ㅂrㄹ ㅈr

0개의 댓글