알고리즘/프로그래머스
[프로그래머스] 파이썬 _ 디스크컨트롤러
이숭간
2021. 8. 10. 16:48
728x90
https://programmers.co.kr/learn/courses/30/lessons/42627
문제유형 : 최소힙
문제풀이 :
SJF (Shortest Job First) 방식이다.
- 현재 시점에 수행가능한 job을 걸러낸다.
- 걸러낸 job중 가장짧은 수행시간을 갖는 job부터 수행한다.
- 현재시간갱신하기 ( 현재시간 += 현재작업의 수행시간 )
- 총 걸린시간 갱신하기 ( 총걸린시간 += 현재시간 - 현재작업의 도착시간 )
- 현재 시점에 수행가능한 job이 없다면? 더 뒤에 도착한다는 뜻
- 현재시간을 +1해주며 수행가능한 job이 나올때까지 반복한다.
정답코드:
def solution(jobs):
n = len(jobs)
# 소요시간을 기준으로 정렬
jobs = sorted(jobs, key=lambda x:x[1])
start = 0
answer = 0
while jobs:
for i in range(len(jobs)): # jobs의 개수만큼
if jobs[i][0] <= start: # 기다리고 있는애라면
start += jobs[i][1] # 현재까지 수행된 시간
answer += start - jobs[i][0] # 끝난시점에서 시작시간을 빼야 해당 작업의 총 걸린시간이나옴
jobs.pop(i)
break
# 해당시점에 아직 작업이 들어오지 않았으면 시간 ++
if i == len(jobs) - 1:
start += 1
#print(time)
return answer // n