이숭간 공부기록

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

알고리즘/프로그래머스

[프로그래머스] 파이썬 _ 디스크컨트롤러

이숭간 2021. 8. 10. 16:48
728x90

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

 

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

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

programmers.co.kr

문제유형 : 최소힙

 

문제풀이

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