이숭간 공부기록
[프로그래머스] 파이썬 _ 디스크컨트롤러 본문
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
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] SQL고득점킷 _ GROUP BY (0) | 2021.08.11 |
---|---|
[프로그래머스] SQL고득점킷 _ SUM, MAX, MIN (0) | 2021.08.10 |
[프로그래머스] SQL고득점킷 _ SELECT (0) | 2021.08.09 |
[프로그래머스] 파이썬 _ 순위 (0) | 2021.08.05 |
[프로그래머스] 파이썬 _ 행렬 테두리 회전하기 (0) | 2021.08.03 |