부품 찾기 [이진 탐색]

Ji·2022년 3월 28일
0

이진 탐색

n=int(input())
array1=list(map(int,input().split())) # 가게의 부품
m=int(input())
array2=list(map(int,input().split())) # 손님의 부품
array1.sort()  # 이진 탐색하기 위해 사전 정렬

def binary_search(array,target,start,end):
    while start<=end:
        mid=(start+end)//2
        if array[mid]==target:
            return mid
        elif array[mid]<target:
            start=mid+1
        else:
            end=mid-1

    return None


for i in array2:
    if binary_search(array1,i,0,len(array2))==None:
        print('no',end=' ')
    else:
        print('yes',end=' ')
  • 다량의 정렬된 데이터 검색은 이진 탐색이 가장 효과적. O(logn)
  • 이진탐색 시작 전에는 꼭 sort() 함수를 통해 데이터 정렬을 해줘야 함.

계수 정렬

n=int(input())
array=[0]*1000001

# 가게에 있는 전체 부품 번호 기록
for i in input().split():
    array[int(i)]+=1

# 손님 부품 개수, 부품번호
m=int(input())
x=list(map(int,input().split()))

for i in x:
    if array[i]==1:
        print('yes',end=' ')
    else:
        print('no', end=' ')
  • 부품 번호의 입력 범위에서 리스트를 만들고 계수 정렬 활용

집합 자료형 이용

n=int(input())

array=set(map(int,input().split()))

# 손님의 부품 개수, 부품 번호
m=int(input())
x=list(map(int,input().split()))

for i in x:
    if i in array:
        print('yes',end=' ')
    else:
        print('no', end=' ')
  • 집합 자료형을 사용 시, 데이터가 자동으로 정렬됨.
  • 단순 특정 데이터가 존재하는 지 검사 시 매우 유용함.
profile
공부방

0개의 댓글