[BOJ] 1092 - 배

김우경·2020년 12월 26일
0

알고리즘

목록 보기
32/69

문제 링크

문제 설명

항구에 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)
profile
Hongik CE

0개의 댓글