Just Fighting

[프로그래머스] 디스크 컨트롤러 본문

Algorithm/코딩테스트 연습

[프로그래머스] 디스크 컨트롤러

yennle 2022. 3. 25. 23:51
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