본문 바로가기
알고리즘

백준_1092

by Wonryeol 2021. 3. 12.

문제

지민이는 항구에서 일한다. 그리고 화물을 배에 실어야 한다. 모든 화물은 박스에 안에 넣어져 있다. 항구에는 크레인이 N대 있고, 1분에 박스를 하나씩 배에 실을 수 있다. 모든 크레인은 동시에 움직인다.

각 크레인은 무게 제한이 있다. 이 무게 제한보다 무거운 박스는 크레인으로 움직일 수 없다. 모든 박스를 배로 옮기는데 드는 시간의 최솟값을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 각 크레인의 무게 제한이 주어진다. 이 값은 1,000,000보다 작거나 같다. 셋째 줄에는 박스의 수 M이 주어진다. M은 10,000보다 작거나 같은 자연수이다. 넷째 줄에는 각 박스의 무게가 주어진다. 이 값도 1,000,000보다 작거나 같은 자연수이다.

출력

첫째 줄에 모든 박스를 배로 옮기는데 드는 시간의 최솟값을 출력한다. 만약 모든 박스를 배로 옮길 수 없으면 -1을 출력한다.

해결방안 

가장 먼저 생각 해야 할 고려사항은 처리할 수 있는 가장 무거운 짐부터 처리해야 한다는 점이다. 

>> 왜 이렇게 접근했냐? 

** A(무거운 것) 이 해결되면 B(가벼운것) 이 자연스럽게 해결된다. ** 

문제를 풀때 선행관계를 해결하고자 하면 더 쉽게 풀 수 있을 것 같다. 

 

 

import sys
input = sys.stdin.readline
n = int(input())
C = list(map(int,input().split()))
m = int(input())
B = list(map(int,input().split()))
C.sort(reverse = True)
B.sort(reverse = True)

if B[0] > C[0] :
    print(-1)
    exit()
time = 0
while len(B) > 0:
    time += 1
    for i in C:
        for k in range(len(B)):
            if i >= B[k]:
                B.pop(k)
                break
print(time)

 

 

 

'알고리즘' 카테고리의 다른 글

11279 최대힙  (0) 2022.07.11
백준 1016  (0) 2021.03.13
백준 10942 팰린드롬?  (0) 2021.03.06
ITM_SPRING [Hacker Rank] Breadth first search_ 넓이 우선 탐지  (0) 2021.03.05
백준 1932  (0) 2021.02.27

댓글