https://www.acmicpc.net/problem/1092
문제
지민이는 항구에서 일한다. 그리고 화물을 배에 실어야 한다. 모든 화물은 박스에 안에 넣어져 있다. 항구에는 크레인이 N대 있고, 1분에 박스를 하나씩 배에 실을 수 있다. 모든 크레인은 동시에 움직인다.
각 크레인은 무게 제한이 있다. 이 무게 제한보다 무거운 박스는 크레인으로 움직일 수 없다. 모든 박스를 배로 옮기는데 드는 시간의 최솟값을 구하는 프로그램을 작성하시오.
입력
첫째 줄에 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 각 크레인의 무게 제한이 주어진다. 이 값은 1,000,000보다 작거나 같다. 셋째 줄에는 박스의 수 M이 주어진다. M은 10,000보다 작거나 같은 자연수이다. 넷째 줄에는 각 박스의 무게가 주어진다. 이 값도 1,000,000보다 작거나 같은 자연수이다.
출력
첫째 줄에 모든 박스를 배로 옮기는데 드는 시간의 최솟값을 출력한다. 만약 모든 박스를 배로 옮길 수 없으면 -1을 출력한다.
풀이
처음에는 단순히 크레인과 박스를 내림차순 정렬한 뒤, 크레인의 순서대로 옮길 수 있는 박스를 리스트에서 pop하면 된다고 생각했다. 하지만 이 방법은 시간 초과 문제가 발생했고, 더 줄일 방법이 떠오르지 않아 구글링 결과 PyPy3를 사용하면 된다고 했다.
일단은 그렇게 제출했지만, 나중에 Python3로도 통과할 수 있는 방법을 찾아 보려고 한다.
소스 코드
n = int(input())
w_limit = list(map(int, input().split()))
m = int(input())
w = list(map(int, input().split()))
w_limit.sort(reverse = True)
w.sort(reverse = True)
if w[0] > w_limit[0]:
print(-1)
else:
cnt = 0
while w:
cnt += 1
i = 0
j = 0
while i < n and w:
while j < len(w):
if w_limit[i] >= w[j]:
w.pop(j)
break
else:
j += 1
i += 1
print(cnt)
'알고리즘 공부 > 백준' 카테고리의 다른 글
백준 9576번: 책 나눠주기 (파이썬) (0) | 2022.01.25 |
---|---|
백준 9237번: 이장님 초대 (파이썬) (0) | 2022.01.24 |
백준 12904번: A와 B (파이썬) (0) | 2022.01.21 |
백준 14659번: 한조서열정리하고옴ㅋㅋ (파이썬) (0) | 2022.01.21 |
백준 1343번: 폴리오미노 (파이썬) (0) | 2022.01.21 |