몸과 마음이 건전한 SW 개발자

프로그래머스 [Lv. 3] 디스크 컨트롤러 {언어 : Python} [다시 풀어 보기] 본문

알고리즘/다시 풀어 보기

프로그래머스 [Lv. 3] 디스크 컨트롤러 {언어 : Python} [다시 풀어 보기]

스위태니 2024. 6. 20. 03:05

문제 링크

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

정답 코드

import heapq

def solution(jobs):
    # 작업들을 요청 시간순으로 정렬
    jobs.sort()
    
    # 현재 시각, 완료된 작업의 수, 총 대기 시간을 기록할 변수들
    currentTime = 0
    completedJobs = 0
    total = 0
    
    # 우선순위 큐를 사용하여 처리할 작업을 관리
    hq = []
    idx = 0
    n = len(jobs)
    
    while completedJobs < n:
        # 현재 시간 이전에 요청된 모든 작업을 큐에 추가
        while idx < n and jobs[idx][0] <= currentTime:
            heapq.heappush(hq, (jobs[idx][1], jobs[idx][0]))
            idx += 1
        
        if hq:
            # 큐에서 가장 짧은 작업을 꺼내어 처리합니다.
            workingTime, startTime = heapq.heappop(hq)
            currentTime += workingTime
            total += currentTime - startTime
            completedJobs += 1
        else:
            # 처리할 작업이 없으면 현재 시간을 다음 작업의 요청 시간으로 이동
            currentTime = jobs[idx][0]
    
    # 평균 대기 시간을 계산
    answer = total // n
    return answer

풀이 방법

  • 주석을 보면 끝!

느낀점

  • 주석을 쓰면 풀이 방법을 길게 쓸 필요가 없구나!
  • javascript로 어떻게 다시 풀지...