プログラマコードテスト高得点Kit Hipディスクコントローラ
質問の表示 👈 クリック!
タスクの要求から終了までの所要時間の平均値を最小限に抑える.
=現在の時点で最も時間のかかる作業を処理
最初のリクエストのタスクを降順にソート
=>jobs pop()は、最後尾のタスクをポップアップします.
""
現在の時点(end)で処理可能なタスクをジョブから取り出し、最小データ構造に追加します.=>現在の時点で処理可能な作業条件=現在の時点または現在の時点より前に要求された作業
データ構造が最小の場合、pop()は最短時間から処理を開始します.
もしなかったら、今の時間を+1して、新しいことが来るのを待っています.
""
完了日数が合計日数に等しくなるまで、次の「」の手順を繰り返します.=>このセクションは、「完了する必要があるジョブの数」=「合計ジョブの数」として定義され、各ジョブを処理するときに「完了する必要があるジョブの数」を1に減らし、ゼロになるまで繰り返しコードとして実装されます.
💡 に答える
解✔方法
タスクの要求から終了までの所要時間の平均値を最小限に抑える.
=現在の時点で最も時間のかかる作業を処理
最初のリクエストのタスクを降順にソート
=>jobs pop()は、最後尾のタスクをポップアップします.
""
現在の時点(end)で処理可能なタスクをジョブから取り出し、最小データ構造に追加します.=>現在の時点で処理可能な作業条件=現在の時点または現在の時点より前に要求された作業
データ構造が最小の場合、pop()は最短時間から処理を開始します.
もしなかったら、今の時間を+1して、新しいことが来るのを待っています.
""
完了日数が合計日数に等しくなるまで、次の「」の手順を繰り返します.=>このセクションは、「完了する必要があるジョブの数」=「合計ジョブの数」として定義され、各ジョブを処理するときに「完了する必要があるジョブの数」を1に減らし、ゼロになるまで繰り返しコードとして実装されます.
インプリメンテーションコード👇
import heapq
def solution(jobs):
#제일 먼저 요청 된 작업이 맨 뒤에 오도록 내림차순 정렬
jobs.sort(reverse = True)
N = len(jobs) #총 작업의 개수
cmplete_N = N #완료 해야 할 작업의 개수
start, end = -1, 0 #작업 시작 시간, 작업 완료 시간
hq, sum_t = [], 0 #heap자료구조 , 소요시간 총 합
while cmplete_N: #전체 반복문은 완료된 작업이 N개일때 종료
#현재 시점에서 처리 할 수 있는 작업들을 heap에 추가하는 과정
while jobs:
if jobs[-1][0] <= end:
rq_time, size = jobs.pop() #요청시간, 소요시간
heapq.heappush(hq, (size, rq_time))
else:
break
#heap에 담긴 작업 수행 => 가장 작은 소요시간을 가진 작업 먼저 수행
if hq:
size, rq_time = heapq.heappop(hq) #소요시간, 요청시간
start = end #다음 직업 시작 시간 = 이전 작업 완료 시간
end = start + size #다음 작업 완료 시간 = 작업 시작 시간 + 소요시간
sum_t += end - rq_time #작업 끝나는 시간 - 작업 요청 시간
cmplete_N -= 1 #작업을 완료할 때마다 1씩 감소
else:
end += 1 #종료시간을 1씩 증가시키며 새로운 일이 들어오길 기다림
return sum_t // N
Reference
この問題について(プログラマコードテスト高得点Kit Hipディスクコントローラ), 我々は、より多くの情報をここで見つけました https://velog.io/@himinhee/프로그래머스-코딩테스트-고득점-Kit힙디스크-컨트롤러テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol