알고리즘

[Python | 프로그래머스 | Lv_3] 디스크 컨트롤러

빅디 2024. 3. 31. 03:27
728x90

😄 아이디어

1. 매 ms를 반복문으로 구현 (최대값 1000 * 1000, 넉넉히 추가 부여)

2. 현재 시간에 작업이 들어오면 _!task!_변수에 보관

3. _!taskEndTime!_로 현재 작업여부 판단 👉 수행하는 작업이 없으면, _!tasks!_에서 가장 소모 값이 적은 작업수행

4. 추가될 작업 혹은 관리되는 작업이 없다면 종료

def solution(jobs):
    length = len(jobs)
    maxTime = 100_000_000
    total = 0
    tasks = []
    taskEndTime = 0

    for t in range(0, maxTime):
        for index, job in reversed(list(enumerate(jobs))):
            if t == job[0]:
                tasks.append(jobs.pop(index))

        optIndex = -1
        optTime = 1001
                
        for i, task in enumerate(tasks):
            if optTime > task[1]:
                optTime = task[1]
                optIndex = i
                
        if t >= taskEndTime and len(tasks) > 0:
            taskEndTime = t + tasks[optIndex][1]
            workTime = taskEndTime - tasks[optIndex][0]
            total += workTime
            del tasks[optIndex]
        
        if len(jobs) == 0 and len(tasks) == 0:
            break
        
    return total // length

✔️ 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/42627#