https://programmers.co.kr/learn/courses/30/lessons/42627
해결방안을 모르겠어서 정답을 찾아봤었다.
요청부터 일이 끝난 시간까지의 합들을 구하는 문제이기 때문에, 어떤 일이 끝난뒤, 바로 일처리가 가능한 것들중 빨리 끝나는 일 부터 해결하는 것이 시간을 단축하는 방법이다.
바로 일처리가 가능한 일들을 알아보기 위해서는, 어떤 일의 요청시간이 현재 작업하고 있는 일의 중간에 들어오면, 현재 작업하는 일이 끝나면 바로 일을 수행할 수 있다.
만약 바로 일처리가 가능한 일이 없다면, 가장 빠르게 착수할 수 있는 일을 시작하는 것이다.
어떤 일의 요청시간이 있을때, 바로 다음에 일을 할 수 있는지 알아보려면 다음과 같다
그렇기 때문에 작업을 시작한 시간, 작업이 끝나는 시간 변수가 필요하다.
또 한가지로 어떤 일이 끝나고 가능한 일들 중 가장 빨리 끝나는 일부터 처리하게 되는데, 그 일을 처리하는 도중 처리기간이 짧은 일의 요청이 들어온다면 현재 일을 끝낸 뒤, 짧은 기간의 일을 해결해야 하기 때문에 힙을 통해 최솟값을 계속해서 갱신해주어야 한다.
import heapq
def solution(jobs):
answer = 0
current_time = 0
start = -1
finished = 0
heap = []
jobs.sort(key = lambda x: (x[0],x[1]))
while finished < len(jobs):
for job in jobs:
if start < job[0] <= current_time:
heapq.heappush(heap,(job[1],job[0]))
if len(heap) > 0:
wjob = heapq.heappop(heap)
start = current_time
finished += 1
current_time += wjob[0]
answer += current_time - wjob[1]
else:
current_time += 1
return answer // len(jobs)