본문 바로가기
알고리즘/python

이.코.테 부품찾기, 정렬된 배열에서 특정 수의 개수 구하기(이진 탐색)

by 펀구구 2022. 1. 24.

https://youtu.be/94RC-DsGMLo?t=1355

정렬된 배열에서 특정 수의 개수 구하기 코드

from bisect import bisect_left, bisect_right

N, M = map(int, input().split())
data = list(map(int, input().split()))

left = bisect_left(data, M)
right = bisect_right(data, M)
if left - right == 0:
    print(-1)
else:
    print(right - left)

간단하게 bisect 라이브러리를 이용하면 해결 가능하다.

 

p.197 부품찾기 코드

N = int(input())
data1 = list(map(int, input().split()))
M = int(input())
data2 = list(map(int, input().split()))

data1.sort()


def bisect(data, a, b, target):
    start = a
    end = b
    while start <= end:
        mid = (start + end) // 2
        if data[mid] == target:
            return mid
        elif data[mid] > target:
            end = mid - 1
        else:
            start = mid + 1
    return -1


for i in data2:
    ans = bisect(data1, 0, N - 1, i)
    if ans == -1:
        print("no")
    else:
        print("yes")

bisect라는 이진탐색 함수를 정의하고 각 부품마다 이진탐색을 적용하여 부품이 존재하는지 확인한다.