문제
지민이는 항구에서 일한다. 그리고 화물을 배에 실어야 한다. 모든 화물은 박스에 안에 넣어져 있다. 항구에는 크레인이 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 |
댓글