문제

지민이는 항구에서 일한다. 그리고 화물을 배에 실어야 한다. 모든 화물은 박스에 안에 넣어져 있다.

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

각 크레인은 무게 제한이 있다. 이 무게 제한보다 무거운 박스는 크레인으로 움직일 수 없다. 모든 박스를 배로 옮기는데 드는 시간의 최솟값을 구하는 프로그램을 작성하시오.

풀이

다른 분들은 1분 동안에 옮길 수 있는 박스들은 옮기고, 옮길 수 없는 박스에 대해서는 그냥 두고 다음 박스로 넘어가는 방식으로 구현했던 것 같습니다.

저는 1분이라는 시간 동안 몇개의 박스를 넣을 지가 아니라, 각 크레인에 담긴 박스의 개수가 짐을 옮길 때 발생하는 시간이라고 봤습니다.

모든 크레인은 동시에 움직이기 때문에, 모든 박스를 넣었을 때의 시간은 크레인에 담은 박스의 개수 중 가장 큰 값 입니다.

최솟값을 구하기 위해 그리디 알고리즘을 적용했습니다.

효율적으로 크레인을 사용하기 위해 큰 제한 무게를 가진 크레인이 가벼운 박스를 옮기지 않도록 하였습니다.

무거운 박스부터 해당 박스를 넣을 수 있는 크레인들 중 현재 박스가 가장 적게 들어있는 크레인에 넣었습니다.

IMG_8ECBC6A2779A-1.jpeg

IMG_D02D0702303F-1.jpeg

IMG_150F7152020C-1.jpeg

IMG_E2D102540089-1.jpeg

IMG_41CB9B84BF77-1.jpeg

IMG_E54140604192-1.jpeg