[프로그래머스, 파이썬] 디스크 컨트롤러 - 레벨 3 | 우선순위큐

PoemSilver·2023년 1월 15일
0

Algorithm

목록 보기
14/30

📌 프로그래머스 - 디스크 컨트롤러


처음에 문제 잘못 읽고 이해해서 한참 헤맸다..
문제를 잘 읽어보니 왜 내가 실행했을 때 틀리는지 깨달은..

앞으론 문제를 꼼꼼히 읽자!

📝 내 답안


from queue import PriorityQueue
def solution(jobs):
    answer = 0
    q = PriorityQueue()
    n = len(jobs)
    # 현재 시점
    cur_t = 0
    # 현재 쌓인 작업소요시간
    cur_c = 0
    
    while 1:
        temp = []
        # 현재 시점보다 작업 요청시간이 작거나 같으면
        for t,c in jobs:
            if t <= cur_t:
                # 작업소요시간(cost)가 작은 순대로 우선순위큐
                q.put((c,t))
            else:
                temp.append([t,c])
        # jobs 갱신(현재 q에 들어가지 않은 것들로)
        jobs = temp
        
        # 더 이상 작업할 것 없음
        if q.empty() == True and jobs == []:
            break
        
        # 작업물은 남았지만 현재 시점에서 작업할 수 있는 work 없음
        if q.empty() == True:
            cur_t += 1
        else:
            work_c, work_t = q.get()
            cur_t += work_c
            cur_c += cur_t - work_t
        
    return cur_c//n

🔮 풀이

  1. 현재 시점에서 처리 가능한 작업목록 우선순위큐(q)에 넣기
    (이 때, 처리 시간 기준으로 오름차순 정렬)

  2. 현재 시점에서 처리 가능하지 않은 작업목록만 따로 모아 jobs에 갱신

  3. 현재 시점에서 처리 가능한 작업목록이 있으면 가장 우선순위가 높은 q를 꺼내작업하고, 현재 시점과 현재 처리 시간 갱신

  4. 현재 시점에서 처리 가능한 작업목록이 없으면 현재 시점 +1 해주기

  5. 현재 시점에서 처리 가능한 작업목록도 없고, 남은 처리 목록(jobs)도 없으면 break

  6. 쌓인 처리 시간 (cur_c)을 작업 갯수로 나누어 평균내서 return

0개의 댓글

관련 채용 정보