힙 - 디스크 컨트롤

송다은·2024년 10월 15일
from collections import deque
def solution(jobs):
    answer = 0
    sorted_jobs = sorted(jobs, key=lambda x : x[1])
    queue = deque()
    queue.append(0)
     
    for i, ms in enumerate(sorted_jobs): #i는 인덱스 / ms[0]가 요청, ms[1] 걸리는 시간
        ex_time = queue.popleft() #이전 걸렸던 시간 0 / 3 / 9
        temp = ex_time + ms[1] # 0+3 / 3+6 / 9+9
        temp2 = temp - ms[0] #요청부터 걸렸던 시간 3-0 / 9-2 / 18-1
        answer += temp2 # 3 7 17 
        #if i == 0 :
         #   answer += ms[1] #처음 걸리는 시간
            
        queue.append(temp) #걸리는 시간 넣기 3 9
        
        
    
    return answer/len(sorted_jobs)

첫 코드.. 하나의 예제는 맞았으나 다른 예외들이 많나봄....
그래도 나 혼자 코드 작성해보고 예제라도 맞기 시작한게 뿌듯하다!!
그럼 이제 다른 코드를 한 번 확인해보면

def solution(jobs):
    # jobs를 요청 시점 기준으로 정렬 (요청 시점이 같은 경우 소요 시간 기준으로 정렬)
    jobs.sort(key=lambda x: (x[0], x[1]))

    current_time = 0  # 현재 시간
    total_waiting_time = 0  # 총 대기 시간
    completed_jobs = 0  # 완료한 작업 수
    n = len(jobs)  # 작업 수

    while completed_jobs < n:
        # 현재 시점에서 처리할 수 있는 작업 목록
        available_jobs = [job for job in jobs if job[0] <= current_time]

        if available_jobs:
            # 가장 소요 시간이 짧은 작업 선택
            job = min(available_jobs, key=lambda x: x[1])
            jobs.remove(job)  # 처리한 작업 목록에서 제거
            
            current_time += job[1]  # 현재 시간 업데이트
            total_waiting_time += (current_time - job[0])  # 대기 시간 추가
            completed_jobs += 1  # 작업 완료 수 증가
        else:
            # 대기 중인 작업이 없으면 시간 증가
            current_time += 1

    # 평균 대기 시간 계산 (소수점 이하 버림)
    average_waiting_time = total_waiting_time // n
    return average_waiting_time

현재 시간보다 작거나 같은 시점의 작업들만 작업할 수 있는 걸로 해두고, 그 중에서도 소요시간이 짧은 작업을 선택해서 한다는 점!! 을 주목할 수 있었다
역시 lambda를 잘 사용하는게 좋은 것 같다

profile
Anomaly Detection, AI Security, Multimodal

0개의 댓글