항구에 N대의 크레인이 있고, M개의 박스가 있다. 각 크레인은 1분에 박스 1개씩 옮길 수 있고, 각 크레인에는 무게 제한이 있다. 모든 크레인은 동시에 작동할때, 모든 박스를 배로 옮기는데 드는 최소값은? (단, 옮길 수 없는 경우에는 -1)
정렬 후 그리디 알고리즘을 사용하는 문제이다.
1. 크레인의 무게 제한 리스트와 각 박스의 무게를 내림차순으로 정렬한다.
2. 모든 크레인에 대해 해당 크레인이 옮길 수 있는 가장 무거운 박스를 찾고 해당 박스를 리스트에서 pop
import sys
from bisect import bisect_left
input = sys.stdin.readline
N = int(input())
limit = list(map(int, input().strip().split()))
limit.sort(reverse=True)
M = int(input())
weight = list(map(int, input().strip().split()))
weight.sort(reverse=True)
answer = 0
if limit[0] < weight[0]:
print(-1)
sys.exit()
#모든 크레인에 대해 해당 크레인이 옮길 수 있는 가장 큰 상자 찾기
while weight:
for l in limit:
for j in range(len(weight)):
if l >= weight[j]:
weight.pop(j)
break
answer += 1
print(answer)