작업의 우선순위를 결정하는 문제이므로, 우선순위 큐를 써야겠다고 생각했다.
내가 고려해야겠다고 생각한 점은 다음과 같다.
- 요청이 들어오는 순서는 정해져 있다.
- 하지만 요청이 먼저 들어왔더라도 작업 시간이 짧으면 먼저 처리한다.
- 위 두 가지 요소를 처리하기 위해 2가지 방안을 사용할 수 있을 것이다.
- 작업 시간이 짧은 것을 뽑는 것은 우선순위 큐(Heap)를 사용한다.
- 요청이 먼저 들어온 순서대로 큐에 넣어야 하므로, 원래 배열을 정렬한다.
- 선 작업이 끝나기 전 요청은 모두 대기를 시켜놓아야 한다.
- 이는 현재 작업의 완료 시간보다 도착시간이 빠른 일은 모두 큐로 집어넣도록 한다.
일종의 Sweep Algorithm이라고 생각한다.
최종 구현은 아래와 같다.