다음은 약간 다른 접근 방식입니다. 첫 번째 부분은 설명을위한 것입니다.
모든 작업의 전체 타임 라인을 나타내는 int 배열을 만듭니다. 시간, 분 또는 기타 필요한 시간이 될 수 있습니다. 시간이 걸릴거야. 배열의 크기를 설정하는 가장 빠른 시작 시간과 마지막 종료 시간을 찾습니다. 모든 원소를 0으로 초기화하십시오.
각 작업을 반복하면서 작업이 실행되는 시간당 타임 라인에서 카운터를 증가시킵니다. 그래서 일이 오후 3시에서 오후 5 시까 지 실행된다면 2 시간이됩니다. 그래서 3 시간과 4 시간 슬롯을 증가시켜 그 시간 동안 작업이 실행 중임을 나타냅니다.
타임 라인을 반복하면서 발생하는 0의 수를 유지합니다. 그것들은 아무 작업도 실행하지 않는 시간 슬롯입니다.
이제 이해한다면 쉽게 배열을 제거 할 수 있습니다. (potintially large) 배열을 만드는 대신 전체 타임 라인의 시작과 끝 시간을 추적하십시오. 해당 범위의 각 시간마다 모든 작업을 반복하고 그 시간 동안 실행중인 작업 수를 확인합니다. 0 인 것은 유휴 시간입니다.
이것은 자정을 감싸는 작업과 관련된 문제를 피하기 때문에 제가 생각한 접근법입니다. – MikeJ