문제이해
jobs의 각 행은 하나의 작업에 대한 [작업이 요청되는 시점, 작업의 소요시간]
작업의 요청부터 종료까지 걸린 시간의 평균이 최소가 되는 값 구하기
즉 작업의 요청부터 종료까지 걸린시간을 최소로 하기
핵심 : 작업시간이 가장 적게걸리는 것 (작업소요시간이작은것) 부터 수행한다
1. 시작시간을 0 으로 하고 그시간에 담을 수 있는작업들을 배열temp에 담기
2. temp 에다가 작업시간이 적게걸리는 순으로 빼내기
3. 현재시간에 수행할 수 있는 작업이 없으면 jobs 에서 다시 꺼내서 시간과 answer 계산하기
import heapq
def solution(jobs):
n = len(jobs)
answer = 0
temp = [] # 현재시간에 수행할수있는 작업 담는 배열
heapq.heapify(jobs)
time = 0
while jobs or temp:
# jobs배열이 있고 현재수행할 수있으면 temp에 담기
while jobs and jobs[0][0] <= time:
request_start,work_time = heapq.heappop(jobs)
heapq.heappush(temp,[work_time,request_start])
# temp 에 있는 작업시간이 적은것부터 수행 , 시간과 answer증가시키기
if temp:
work,request = heapq.heappop(temp)
time += work
answer += time - request
# 작업끝난시간에 수행할 수 있는 시간이 없으면 jobs에서 꺼내서 현재시간다시계산
elif jobs:
request,work = heapq.heappop(jobs)
time = work + request
answer += time - request
return answer
jobs = [[0, 3], [1, 9], [15, 6]]
print(solution(jobs))
def solution(jobs):
answer = 0 # 작업요청부터 종료까지 걸린 총시간
n = len(jobs)
sorted_list = sorted(jobs, key=lambda x: x[1]) # 소요 시간 오름차순 정렬
time = 0 #현재시간
while sorted_list:
for i in range(len(sorted_list)):
# 작업 시점이 start보다 작거나같으면 작업시작하기
if sorted_list[i][0] <= time:
time += sorted_list[i][1]
answer += start - sorted_list[i][0]
sorted_list.pop(i)
break
else: # 반복문을 모두 돌았을 경우에도 시작하는 시간이없다면 시간을 1증가 , break에 하나도 안걸리면 시간증가
time += 1
return answer // n
jobs = [[0, 3], [1, 9], [15, 6]]
print(solution(jobs))