현재 귤나무에 남은 귤의 수를 이라고 하겠습니다.
이 의 최솟값보다 작아지기 전까지는 적어도 한 마리의 곰곰이가 귤을 딸 수 있습니다.
따라서 문제를 다음과 같이 표현할 수 있습니다.
- 으로 두고, 를 순회하며 인 경우 를 에 더합니다.
- 을 만큼 감소시킵니다.
- 이를 이 될 때까지 반복합니다.
첫 과정에서 순회를 마친 후 가 결정된 상황을 생각해봅시다.
이제 에서 를 빼고 다시 를 구해야 하는데, 사실 이 보다 작아지기 전까지는 의 값이 변하지 않습니다.
이 이상이라면 기존에 더해진 는 항상 더해지고, 은 계속 감소하기 때문에 새로운 가 더해질 일이 없기 때문입니다.
따라서 을 만큼 감소시키는 대신, 에 를 할당해도 됩니다.
이하의 수 로 을 나눈 값의 나머지는 항상 이하이기 때문에, 위 시행은 최대 번만 이루어집니다.
따라서 전체 시간복잡도 에 문제를 풀 수 있습니다.