Cometin'

BOJ-1092 - Python

2021-03-19 at Algorithm category

항구에 각 옮길 수 있는 최대 무게가 있는 N개의 크레인, 각 무게가 있는 M개의 화물이 있다. 이 때 최소 시간으로 모든 박스를 옮겼을 때의 시간을 출력하는 문제. 첫 번째 풀이는 크레인 중 제일 작은 값과 리스트를 슬라이싱하여 비교하였으나, 작은 것부터 계산할 시에 3 6 8, 1 2 3 4 5 6 7 8 9와 같은 반례에 통과하지 못하였다. 두 번째 풀이는 옮길 수 있는 화물 중 제일 무거운 것부터 del 메소드를 이용하여 풀었다. 간단하지만 생각보다 긴 시간을 소비하였다.

# n = int(input())
# cranes = sorted(map(int, input().split()))
# min_crane = min(cranes)
# m = int(input())
# boxes = sorted(map(int, input().split()))
#
# cnt, answer = 0, 0
#
# while True:
#     if cnt >= m: break
#
#     length = cnt+n if cnt+n < m else m if cnt == m-1 else -1
#     now_boxes = boxes[cnt:length]
#     max_box = now_boxes[-1]
#
#     if min_crane >= max_box:
#         cnt += n
#
#     else:
#         for crane in cranes:
#             # print(crane, boxes[cnt])
#             if cnt >= m: break
#
#             if crane >= boxes[cnt]:
#                 cnt += 1
#                 continue
#             if crane == cranes[-1] and crane < boxes[cnt]:
#                 print(-1)
#                 exit(0)
#
#     answer += 1
#
# print(answer)

n = int(input())
cranes = sorted(map(int, input().split()), reverse=True)
m = int(input())
boxes = sorted(map(int, input().split()), reverse=True)

if cranes[0] < boxes[0]:
    print(-1)
    exit(0)

answer = 0
while m > 0:
    answer += 1
    for crane in cranes:
        for i in range(m):
            if crane >= boxes[i]:
                del boxes[i]
                m -= 1
                break

print(answer)

hyesungoh

Personal blog by hyesungoh.

I like to share my knowledge for those who wandering in issue.