공부 기록장
[프로그래머스 - Python] 디스크 컨트롤러 본문
https://school.programmers.co.kr/learn/courses/30/lessons/42627
문제 요약
각 작업의 [작업 요청 시점, 작업 소요시간]이 주어질 때
요청부터 종료까지 걸린 시간의 평균을 가장 줄이는 방법으로 처리 시, 처리 시간의 평균값?
코드 설명
import heapq
def solution(jobs):
answer, now, i = 0, 0, 0
start = -1
heap = []
while i < len(jobs):
# 현재 시점에서 처리할 수 있는 작업을 heap에 저장
for j in jobs:
if start < j[0] <= now:
heapq.heappush(heap, [j[1], j[0]])
# 처리할 작업이 있는 경우
if len(heap) > 0:
cur = heapq.heappop(heap)
start = now
now += cur[0]
answer += now - cur[1]
i += 1
else:
now += 1
return answer // len(jobs)
대기 시간이 짧아야 하기 때문에, 현재 시점에서 매번 처리할 수 있는 작업 중 가장 짧은 것을 선택하기 위해
작업 소요시간을 기준으로 정렬될 수 있게 구현했다.
heap의 길이가 0보다 크면, 처리할 작업이 있는 경우이므로
작업 요청 시간과 종료 시간을 계산하고 다음 작업으로 넘어갈 수 있도록 start, now 값을 갱신해준다.
heap 길이가 0이면, 다음 시간으로 넘어가준다.
배운 점
- 힙(우선순위 큐)는 작업의 우선순위를 효율적으로 관리할 수 있는 자료구조이다.
- 작업이 없는 경우에도 시간을 흘려보내야 한다.
참고 자료
'코딩 테스트 > 프로그래머스 문제 풀이' 카테고리의 다른 글
[프로그래머스 - Python] 타겟 넘버 (0) | 2024.10.31 |
---|---|
[프로그래머스 - Python] 여행경로 (0) | 2024.10.24 |
[프로그래머스 - Python] 기능 개발 (0) | 2024.10.17 |
[프로그래머스 - Python] 소수 찾기 (1) | 2024.10.16 |
[프로그래머스 - Python] N으로 표현 (0) | 2024.10.16 |