1. 문제 / 난이도 : Gold Ⅴ
1092번: 배
첫째 줄에 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 각 크레인의 무게 제한이 주어진다. 이 값은 1,000,000보다 작거나 같다. 셋째 줄에는 박스의 수 M이 주어진다. M은 10,000보
www.acmicpc.net
2. 풀이 및 코드 설명
하... 분명히 틀린 부분이 없는데 계속 시간초과가 나서 PyPy3로 제출해보니 맞았다...앞으로는 PyPy3로 제출하자....
무거운 화물을 들 수 있는 크레인에게 무거운 화물을 옮기게 하자! 만 기억하면 쉽게 풀리는 문제. 무게 제한이 높은 크레인에게 현재 남아 있는 화물 중 가장 무거운 것을 들게 해야 모든 박스를 옮기는 최소 시간이 나온다.
간단한 코드이기 때문에 코드 블락 단위 설명은 생략.
3. 전체 코드
import sys
N = int(input())
limits = map(int, sys.stdin.readline().split()) # 크레인 별 무게 제한
M = int(input())
packages = map(int, sys.stdin.readline().split()) # 화물 별 무게
# 무게 제한과 화물 무게 전부 내림차순으로 정렬
limits = sorted(limits, reverse=True)
packages = sorted(packages, reverse=True)
# 무게 제한이 제일 높은 크레인도 제일 무거운 화물을 들 수 없는 경우
if packages[0] > limits[0] :
print(-1)
exit()
answer = 0
# 화물이 전부 옮겨질 때까지
while len(packages) > 0:
answer += 1
# 무게제한을 돌면서 옮길 수 있는 화물을 옮김
for l in limits:
for j in range(len(packages)):
if l >= packages[j]: # 화물을 옮길 수 있으면
del packages[j]
break
print(answer)
'알고리즘 공부 > Baekjoon' 카테고리의 다른 글
[백준 2668/C++] 숫자고르기 (0) | 2020.11.06 |
---|---|
[백준 16946/Python] 벽 부수고 이동하기4 (0) | 2020.11.06 |
[백준 2572/Python] 보드게임 (0) | 2020.10.25 |
[백준 1058/C++] 친구 (0) | 2020.10.24 |
[백준 2623/C++] 음악 프로그램 (0) | 2020.10.20 |