프로그래머스에 있는 힙(Heap) 문제이다. heapq 라이브러리를 사용했고 처리한 작업 수(count), 최근 작업이 끝난 시간(last), 총 작업시간(time) 등 여러 변수가 사용되어 고려할게 많았던 문제였다.
import heapq
def solution(jobs):
count, last, answer = 0, -1, 0
heap = []
jobs.sort()
# 시작시간 초기화
time = jobs[0][0]
while count < len(jobs):
for s, t in jobs:
if last < s <= time:
# 작업 소요시간으로 min heap을 만들기 위해 (t, s) 푸시
heapq.heappush(heap, (t, s))
# 바로 수행할 수 있는 작업이 있는 경우
if len(heap) > 0:
count += 1
last = time
term, start = heapq.heappop(heap)
time += term
answer += (time - start)
# 바로 수행할 수 있는 작업이 없는 경우
else:
time += 1
return answer//len(jobs)
실행해본 테스트케이스는 아래와 같다.
print(solution([[0, 3], [1, 9], [2, 6]])) # 9
print(solution([[0, 3], [4, 3], [10, 3]])) # 3
print(solution([[0, 10], [2, 3], [9, 3]])) # 9
print(solution([[1, 10], [3, 3], [10, 3]])) # 9
print(solution([[0, 10]])) # 10
print(solution([[0, 10], [4, 10], [5, 11], [15, 2]])) # 15
print(solution([[24, 10], [18, 39], [34, 20], [37, 5], [47, 22], [20, 47], [15, 2], [15, 34], [35, 43], [26, 1]])) # 74
print(solution([[24, 10], [18, 39], [34, 20], [37, 5], [47, 22], [20, 47], [15, 34], [15, 2], [35, 43], [26, 1]])) # 74