728x90
문제)
동빈이네 전자 매장에는 부품이 N개 있다. 각 부품은 정수 형태의 고유한 번호가 있다. 어느 날 손님이 M개 종류의 부품을 대량으로 구매하겠다며 당일 날 견적서를 요청했다. 동빈이는 때를 놓치지 않고 손님이 문의한 부품 M개 종류를 모두 확인해서 견적서를 작성해야 한다. 이때 가게 안에 부품이 모두 있는지 확인하는 프로그램을 작성해보자.
가게의 부품이 총 5개
N = 5
[8, 3, 7, 9, 2]
손님은 총 3개의 부품이 있는지 확인요청
N = 3
[5, 7, 9]
Output:
No yes yes
접근 방식)가게의 부품을 sort 함수를 이용해 오름차순으로 정렬시키고 target을 손님의 요청사항 하나하나씩 이진탐색을 써서 찾아보자!
코드 1) 이진탐색
def binary_search(nums, target):
def bs(start, end):
if start > end:
return -1
mid = (start + end) // 2
if nums[mid] < target:
return bs(mid + 1, end)
elif nums[mid] > target:
return bs(start, mid - 1)
else:
return mid
return bs(0, len(nums) - 1)
n = int(input())
array = list(map(int, input().split()))
array.sort()
m = int(input())
x = list(map(int, input().split()))
for i in x:
result = binary_search(array, i)
if result != -1:
print('yes', end=' ')
else:
print('no', end=' ')
2) 계수 정렬(이코테)
# N(가게의 부품 개수)을 입력받기
n = int(input())
array = [0] * 1000001
# 가게에 있는 전체 부품 번호를 입력받아서 기록
for i in input().split():
array[int(i)] = 1
# M(손님이 확인 요청한 부품 개수)을 입력받기
m = int(input())
# 손님이 확인 요청한 전체 부품 번호를 공백으로 구분하여 입력
x = list(map(int, input().split()))
# 손님이 확인 요청한 부품 번호를 하나씩 확인
for i in x:
# 해당 부품이 존재하는지 확인
if array[i] == 1:
print('yes', end=' ')
else:
print('no', end=' ')
728x90
'알고리즘 > 파이썬' 카테고리의 다른 글
[파이썬 알고리즘] 이코테Q28 - 고정점 찾기 (0) | 2022.05.30 |
---|---|
[파이썬 알고리즘] 이코테Q27 - 정렬된 배열에서 특징 수의 개수 구하기 (0) | 2022.05.30 |
[파이썬 알고리즘] 75.leetcode - Sort Colors (0) | 2022.05.27 |
[파이썬 알고리즘]973.leetcode - 원점에 k번째로 가까운 점 (0) | 2022.05.27 |
[파이썬 알고리즘] Mergesort 기초. (0) | 2022.05.27 |