본문 바로가기
Programming/Programmers

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

by 데이터현 2021. 8. 12.

https://programmers.co.kr/learn/courses/30/lessons/42627

 

코딩테스트 연습 - 디스크 컨트롤러

하드디스크는 한 번에 하나의 작업만 수행할 수 있습니다. 디스크 컨트롤러를 구현하는 방법은 여러 가지가 있습니다. 가장 일반적인 방법은 요청이 들어온 순서대로 처리하는 것입니다. 예를

programmers.co.kr

import heapq
def solution(jobs):
    '''
    풀이 알고리즘 - 비선점 디스크 스케줄러
    1. 2차원 배열을 요청과 작업 순서가 적은대로 정렬. sort활용.
    2. 작업 시작 시간과 작업 시간을 고려해서 heapq에 저장
    3. count와 latest, time 최신화 
    '''
    jobs.sort()
    heap = []
    count = 0 # 디스크 컨트롤러 작업 횟수 기록
    answer= 0 # 총 걸린 시간
    latest= -1 # 최근 작업 시작 시간
    time = jobs[0][0] # 첫 작업 시간 초기화
    while count<len(jobs): # 디스크 컨트롤러 작업이 끝나지 않았다면
        for t , s in jobs:
            if latest< t <= time: # 작업 시작 시간 고려 먼저 시작할 작업들 선정
                heapq.heappush(heap,(s,t)) #작업 완료시간 기준으로 min heap 추가
        if len(heap)>0: # 시작할 수 있는 작업이 있는 경우
            count+=1 # 작업 하나 완료
            run, start =heapq.heappop(heap) # heap에서 꺼냄
            latest = time # 최근 작업 시작시간
            time += run # 작업 끝난 시간 최신화
            answer += time-start # 작업 끝난 시간 - 작업 들어온 시간
        else : # 시작할 수 있는 작업이 없는 경우
            time+=1
    return answer//len(jobs) #평균

댓글