[백준] 1092번 배 (파이썬)

dongEon·2023년 3월 23일
0

문제링크 : https://www.acmicpc.net/problem/1092

난이도 : GOLD V

문제풀이

항구에는 크레인이 N대 있고, 1분에 박스를 하나씩 배에 실을 수 있다. 모든 크레인은 동시에 움직인다.

  • 동시에 움직여야하고, 각 크레인별로 옮길수 있는 최대 무게의 박스부터 옮겨야한다.
  • => 박스와 크레인을 내림차순으로 정렬한 후 크레인을 순회하면서 옮길수 있는 박스를 옮기고 time 을 1씩 더한다.

소스코드

import sys

n = int(input())

cranes = list(map(int,input().split()))

m = int(input())

boxs = list(map(int,input().split()))

if max(cranes) < max(boxs): # 박스의 최대무게가 크레인의 최대 무게보다 크면 어차피 박스를 다 못옮기므로 -1
  print(-1)
else:
	# 크레인,박스 둘다 내림차순 정렬
  cranes.sort(reverse = True)
  boxs.sort(reverse = True)
  
  time = 0

  while boxs: 
    for i in cranes:      
      for idx,j in enumerate(boxs):
        if i >= j: 
          boxs.pop(idx) # box.remove(j) 와 시간복잡도는 같다
          break # 박스를 옮길시, 다음 크레인차례
    time += 1

  print(time)

profile
개발하면서 생긴 이슈와 알게된 점, 알고리즘 등을 기록하는 블로그입니다.

0개의 댓글