[プログラマ]ディスクコントローラ-python
2863 ワード
▼▼▼問題説明
HDDは一度に1台しか処理できません.ディスクコントローラを実装する方法はいくつかあります.最も一般的な方法は、リクエストの受信順序に従って処理することである.
例:
一度に1つのリクエストしか実行できないため、各タスクをリクエストの順序で処理する場合:
でもA→C→B順に処理すると
各タスクについて、「要求タスクの時点、タスク所要時間」を含む2 Dタイルジョブをパラメータとして指定した場合は、要求から終了までのタスクの平均値を最小限に抑えるためのソルバを作成します.(ただし小数点以下)
▼▼▼制限
🎈 I/O例
jobs : [[0, 3], [1, 9], [2, 6]]
return : 9
👩💻 マイコード
初めて問題を解いた時、制限事項をよく読んでいなかったので、時間を無駄にしました.
「ハードディスク(HDD)が機能していない場合は、リクエストのタスクを先に処理してください.」この文章を読んでおけば、ずっと易しくなります.
今回もお尻の問題なのでDequeで解きます.問題は難しいと思って、時間がかかりましたが、一番大切なのはまだ完成していないことです.(コードも汚い)
import heapq
from collections import deque
def solution(jobs):
avg_time, finish_time, heap = 0, 0, []
jobs.sort()
d_jobs = deque(jobs)
while(len(d_jobs) != 0):
# 제일 처음 요청
start_jobs = d_jobs.popleft()
finish_time += (start_jobs[0] + start_jobs[1])
avg_time += (finish_time-start_jobs[0])
while (len(d_jobs) != 0):
next_jobs = d_jobs.popleft()
if next_jobs[0] <= finish_time: # 처음 작업 시간 사이에 요청 시간이 있는 작업인 경우
heapq.heappush(heap, next_jobs[1])
else:
# print("next_jobs : ", next_jobs)
finish_time = 0
d_jobs.appendleft(next_jobs)
break
while (len(heap) != 0):
root = heapq.heappop(heap)
for i in jobs:
if i[1] == root:
finish_time += root
avg_time += (finish_time - i[0])
# print("avg_time : ", avg_time)
break
avg_time /= len(jobs)
return int(avg_time)
このようにして作られた結果はこうだった.本当にめまいが...まだ完成していないのにアップロードする理由は、私が実現した過程を確認したいからです.
実は2次元配列で構成されているので複雑です...これさえ解决できないのか.早く解決したいようう
Reference
この問題について([プログラマ]ディスクコントローラ-python), 我々は、より多くの情報をここで見つけました https://velog.io/@tanger2ne/프로그래머스-디스크-컨트롤러-pythonテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol