본문 바로가기

코딩테스트

프로그래머스/ 디스크 컨트롤러 (python)

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

 

프로그래머스

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

programmers.co.kr

 


아이디어

  • 소요 시간이 적은 작업을 먼저 처리 할 수 있도록 힙을 활용한다.
  • 각 작업이 완료 된 시점을 now에 더해서 현재 위치를 파악한다.
  • 각 작업 별 소요 시간은 (now(현재 위치) - 작업 요청 시간)이다.

 

어려웠던 점

해당 방식으로 소요시간을 계산하기 위해선 now의 위치를 지속적으로 갱신해야 한다.

예제가 now 이전의 작업이 있을 경우로만 되어 있었다.

따라서 now 보다 이후 작업이 들어올 경우는 now를 어떤식으로 갱신해야할지 고려를 안하고 있어서 에러가 많이 났다.

좀 더 다양한 경우를 생각해봐야 할 것

 

전체 코드

import heapq

def solution(jobs):
    jobs.sort()
    waiting = []
    count = []
    
    now = 0
    tasks = len(jobs)
    
    while len(count) != tasks:
        while jobs and now >= jobs[0][0]:
            start,cost = jobs.pop(0)
            heapq.heappush(waiting,(cost,start))
        
        if jobs and waiting == []:
            start,cost = jobs.pop(0)
            now = start
            heapq.heappush(waiting,(cost,start))
            
        x,y = heapq.heappop(waiting)
        now += x
        count.append(now-y)
        
                
    answer = sum(count)//tasks
    
    return answer

'코딩테스트' 카테고리의 다른 글

프로그래머스/ 네트워크 (python)  (0) 2023.10.11