이코테
이진탐색 부품 찾기(Python)
문제
전자 매장에는 부품이 N개 있다.
어느날 손님이 M개 종류의 부품을 구매하려고 한다.
이 때 매장에서 손님이 사려고 하는 부품이 있는지 yes와 no 형태로 구하라.
입력 :
array = [9, 3, 7, 9, 2]
target = [5, 7, 9]
결과 : no yes yes
풀이
탐색시간을 줄이기 위해서는 array를 정렬하고 이진 탐색으로 target에 저장된 배열의 인자를 하나씩 탐색해나가면 쉽게 풀 수 있다.
- array를 내림차순으로 정렬
- target 배열의 인자를 하나씩 꺼내서 target으로 설정
- array의 end가 start보다 크거나 같을 동안 while문 반복
- 이진탐색 알고리즘을 사용하여 탐색이 완료되면 Yes, 탐색이 되지 않으면 while 문 밖에서 No(No 저장 때 array[mid]가 t가 아닐 때의 조건을 걸어 둔 이유는 무차별적으로 No가 저장되는 것을 방지하기 위함)
다른 풀이
이진탐색 뿐만 아니라, count sorting, set 자료형을 사용하여 풀 수 있다.
set 자료형은 {} <- 로 array를 묶어 target in {} 문법을 사용하여 쉽게 풀 수 있다.
코드
댓글남기기