[알고리즘] 프로그래머스 - 디스크 컨트롤러
내 풀이
import heapq
import functools
import itertools
import re
import math
import bisect
def solution(jobs):
cur_time = 0
heap = []
jobs.sort()
ans = []
while heap or jobs:
jobs_remove_list = []
# 현재 시각에서 작업 가능한 것들은 jobs에서 빼고 heap으로 옮긴다.
for i in range(len(jobs)):
if jobs[i][0] <= cur_time:
heapq.heappush(heap, (jobs[i][1], jobs[i][0]))
jobs_remove_list.append(jobs[i])
# 작업 가능한 것들을 따로 저장해놨다가 jobs에서 제거하는 과정이다.
for remove_target in jobs_remove_list:
jobs.remove(remove_target)
# 힙에 작업할 것이 있다면, 걸리는 시간이 최소인것부터 작업하면된다.
if len(heap) > 0:
taken_time, ask_time = heapq.heappop(heap)
cur_time += taken_time
ans.append([cur_time, ask_time])
# 작업할 수 없다면 시간이 1초 흐른다.
else:
cur_time += 1
ans_sum = 0
for i in range(len(ans)):
ans_sum += ans[i][0] - ans[i][1]
return ans_sum // len(ans)
힙을 이용해서 현재 작업 가능한 것 중, 작업 시간이 가장 짧은 것들부터 작업을 해나가면된다. 처음 heap.append()를 써서 오답이 나왔다. 리스트지만 힙으로 쓰고 싶으면 heapq.heappush(heap, item)을 써야한다.
Author And Source
이 문제에 관하여([알고리즘] 프로그래머스 - 디스크 컨트롤러), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@injoon2019/알고리즘-프로그래머스-디스크-컨트롤러저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)