문제가 길어서 링크로 대신한다.
https://programmers.co.kr/learn/courses/30/lessons/42627
def solution(jobs):
answer = 0
n = len(jobs)
jobs.sort(key=lambda x: (x[0], x[1]))
que = []
while jobs:
if len(que) == 0:
que.append(jobs.pop(0))
out = 0
while que:
item = que.pop(0)
if out == 0:
out += item[0]+item[1]
else:
out += item[1]
answer += out - item[0]
while jobs:
if jobs[0][0] <= out:
que.append(jobs.pop(0))
else:
break
que.sort(key=lambda x: x[1])
return int(answer/n)
운영체제 시간에 배운 스케쥴러가 생각났다.
우선 순위 큐를 사용하는 문제인것은 확실하고
우선 jobs를 요청시간 순으로 정렬해주었다.
(요청시간이 같으면 작업시간으로 정렬해주어야한다. 여기서 많이 헤맴 ㅠ)
그 다음,
jobs의 아이템을 다 pop할때 까지 반복해주고
que에 아이템을 요청시간 순으로 하나씩 넣어준다.
큐에서는 현재 시간을 나타내는 out을 계속 더해준다
처음 out은 요청시간 + 작업시간으로 초기화 해주고 ex) [2,3] -> 5
다음부터는 작업시간만 더해준다.
answer에는 요청부터 작업까지 걸린 모든 시간을 저장하므로
out - 요청시간 을 계속 더해준다.
그리고
현재 시간보다 요청시간이 작거나 같은 아이템들이 jobs에 존재하면
큐로 넣어주고
큐를 작업시간 순으로 정렬한다.
이 과정을 jobs가 비워질 때 까지 반복하고
처음 jobs의 아이템 개수 만큼 answer를 나눠주면 정답!
처음 풀때 out초기화하는 방법을 고려하지 않아서 틀렸었다.
테스트케이스를 보지 않았다면 맞추기 힘들었을것 같다..