[코테] 백준 그리디 1092번 문제
1092번 : 배
문제 링크
https://www.acmicpc.net/problem/1092
문제 설명
지민이는 항구에서 일한다. 그리고 화물을 배에 실어야 한다. 모든 화물은 박스에 안에 넣어져 있다. 항구에는 크레인이 N대 있고, 1분에 박스를 하나씩 배에 실을 수 있다. 모든 크레인은 동시에 움직인다.
각 크레인은 무게 제한이 있다. 이 무게 제한보다 무거운 박스는 크레인으로 움직일 수 없다. 모든 박스를 배로 옮기는데 드는 시간의 최솟값을 구하는 프로그램을 작성하시오.
입력
첫째 줄에 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 각 크레인의 무게 제한이 주어진다. 이 값은 1,000,000보다 작거나 같다. 셋째 줄에는 박스의 수 M이 주어진다. M은 10,000보다 작거나 같은 자연수이다. 넷째 줄에는 각 박스의 무게가 주어진다. 이 값도 1,000,000보다 작거나 같은 자연수이다.
출력
첫째 줄에 모든 박스를 배로 옮기는데 드는 시간의 최솟값을 출력한다. 만약 모든 박스를 배로 옮길 수 없으면 -1을 출력한다.
문제 풀이
아래의 코드를 제출할 때 Python3로 하면 안되고 PyPy3로 제출해야 한다. 이유는 PyPy3는 Python3 언어와 문법은 같지만 JIT(Just In Time) 컴파일 방식을 도입한 것으로 자주 쓰이는 코드를 캐싱하는 기능이 있기 때문에 반복문을 많이 사용하는 복잡한 코드에서는 처리 속도가 우세하다.
import sys
input = sys.stdin.readline
N = int(input())
crane = sorted(list(map(int, input().split())), reverse=True)
M = int(input())
box = sorted(list(map(int, input().split())), reverse=True)
result = 0
if box[0] > crane[0] :
print(-1)
exit()
while len(box) > 0 :
result += 1
for i in crane :
for j in range(len(box)) :
if i >= box[j] :
del box[j]
break
print(result)
Comments