[이것이 코딩 테스트다] with Python
[이것이 코딩 테스트다] 부품 찾기
Evolving Developer
2023. 5. 25. 14:13
🔒 문제
전자 매장에는 부품이 N개 있고, 각 부품은 정수 형태의 고유한 번호가 있다. 부품 M개 종류가 모두 있는지 확인하는 프로그램을 작성해보자.
입력
5
8 3 7 9 2
3
5 7 9
출력
no yes yes
✅ 해설
- 손님이 원하는 부품이 매장에 있는지 [탐색하는 알고리즘]을 짜는 게 관건
- 매장의 부품을 오름차순으로 정렬한 뒤, 이진 탐색
- 손님이 요구하는 부품을 리스트로 받은 뒤, 리스트에서 원소를 꺼내오며 각각 이진탐색을 시행
for 부품 in 손님_부품_리스트:
check = 이진_탐색_함수_실행_후_리턴값
if check:
print("yes")
else:
print("no")
💻 코드
# 매장
n = int(input())
store = list(map(int, input().split()))
# 손님
m = int(input())
customer = list(map(int, input().split()))
# 매장 부품 오름차순 정렬
store.sort()
# 이진 탐색 알고리즘
def search(array, target, start, end):
# 시작과 끝이 역전되는 순간, 찾는 값이 없음을 의미
if start > end:
return False
# mid는 시작과 끝의 중간 인덱스
mid = (start + end) // 2
# 중간값이 목표값과 같다면
if array[mid] == target:
return True
# 중간값이 목표값보다 작다면
elif target > array[mid]:
# 중간 이후 값들을 재탐색
return search(array, target, mid+1, end)
else:
# 중간 이전 값들을 재탐색
return search(array, target, start, mid-1)
# 손님이 요구하는 부품을 하나씩 탐색
for target in customer:
check = search(store, target, 0, n-1)
if search(store, target, 0, n-1):
print("yes", end=' ')
else:
print("no", end=' ')