Just Fighting
[프로그래머스] 디스크 컨트롤러 본문
728x90
https://programmers.co.kr/learn/courses/30/lessons/42627
코딩테스트 연습 - 디스크 컨트롤러
하드디스크는 한 번에 하나의 작업만 수행할 수 있습니다. 디스크 컨트롤러를 구현하는 방법은 여러 가지가 있습니다. 가장 일반적인 방법은 요청이 들어온 순서대로 처리하는 것입니다. 예를
programmers.co.kr
< 문제 설명 >
간단하게 설명하자면 SJF방식을 이용해 평균 반환시간을 구하면 된다.
< 문제 풀이 >
import heapq
def solution(jobs):
answer = 0 # 작업을 처리하는데 걸린 총 시간
jobs.sort() # 정렬. 맨 처음에 들어온 작업을 찾기 위함.
heap = [] # 바로 다음에 처리할 수 있는 작업 리스트. 힙큐
start = -1 # 처음에 시작할때는 -1
end = 0 # 처음에 시작할때는 0
cnt = 0 # 작업을 몇개 끝냈는지 카운트
while cnt < len(jobs): # 작업을 다 끝날때까지 while문
for job in jobs: # 작업 하나씩 꺼내서
if start < job[0] <= end: # 이전 작업 처리중에 들어온 작업이면
heapq.heappush(heap, [job[1], job[0]]) # 힙큐에 추가. [작업시간, 들어온시간]으로
if len(heap) > 0: # 힙큐에 작업이 있으면
temp = heapq.heappop(heap) # 가장 작업시간이 짧은 작업 pop
start = end # 이전 작업이 끝난 시간이 start
end += temp[0] # 이번 작업이 끝날 시간이 end
answer += end - temp[1] # 이번 작업의 반환시간을 더해줌.
cnt += 1 # 작업 하나 끝났으니까 카운트
else :
end += 1 # 만약 작업이 큐에 없으면 시간을 늘림.
return answer//len(jobs)
728x90
'Algorithm > 코딩테스트 연습' 카테고리의 다른 글
[백준] 8진수 2진수 (0) | 2022.05.11 |
---|---|
[백준] 분산처리 (0) | 2022.05.10 |
[프로그래머스] 프린터 (0) | 2022.03.21 |
[프로그래머스] 순위 (0) | 2022.03.20 |
[HackerRank] The Coin Change Problem (0) | 2022.03.18 |
Comments