본문 바로가기
Algorithm/스택&큐&덱&힙

[프로그래머스 lv 3] 디스크 컨트롤러

by HANNI하니 2023. 6. 19.

사용 언어 - Python3

문제 - 디스크 컨트롤러

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

정답

import heapq (정답 맞춘 여부 X)

answer = 0작업의 요청부터 종료까지 걸린 시간

now = 0 현재 시점

i = 0 jobs의 처리개수 저장하기

start = -1 시작시점

 

 

i < len(jobs) 만족할때(jobs 전부 처리할때)까지  while 반복문 수행

j[0] 도착시간이 start와 now 사이에 있다면, 현재 시점에서 처리할 수 있는 작업이다.

=> heapq.heappush(heap, [j[1],j[0]]) : 자동 정렬되어 처리시간이 작은 것 부터 저장된다.

 

만약 heap에 처리할 작업이 있다면,

current = heapq.heappop(heap) 정렬된 heapq에서 왼쪽부터 한개씩 없애주기

start = now

now += current[0] 현재 = 현재+작업시간

anwer += (now - current[1]) 작업 요청시간부터 종료시간까지의 시간 계산

i += 1 jobs 하나 처리완료

 

만약 처리할 작업이 없다면,

now += 1 다음 시간으로 넘어가기

 

return int(answer /len(jobs)) 작업의 요청부터 종료까지 걸린 시간의 평균

import heapq

def solution(jobs):
    answer,now,i = 0,0,0
    start = -1
    heap = []
    
    while i < len(jobs):
        for j in jobs:
            if start < j[0] <= now:
                heapq.heappush(heap,[j[1],j[0]])
        if len(heap) > 0:
            current = heapq.heappop(heap)
            start = now
            now += current[0]
            answer += (now-current[1])
            i += 1
        else:
            now += 1
            
    return int(answer/len(jobs))

 

 

레퍼런스

  • 정답 깃허브
 

GitHub - yyeongeun/codingtest: 코딩테스트 공부

코딩테스트 공부. Contribute to yyeongeun/codingtest development by creating an account on GitHub.

github.com

 

댓글