2022. 6. 1. 20:53ㆍProblem Solving/Programmers
문제 설명
코딩테스트 연습 - 디스크 컨트롤러
하드디스크는 한 번에 하나의 작업만 수행할 수 있습니다. 디스크 컨트롤러를 구현하는 방법은 여러 가지가 있습니다. 가장 일반적인 방법은 요청이 들어온 순서대로 처리하는 것입니다. 예를
programmers.co.kr
문제 풀이
작업의 요청부터 종료까지 걸린 시간의 평균을 최소로 만들어야하는, 즉 SJF(Shortest-Job-First) 스케줄링을 비선점형 방식으로 구현하는 문제였다. 마침 운영체제에서 스케줄링 기법을 공부하고 있었던 터라 반가웠던 문제❕
스케줄링에 관한 내용은 아래에서 확인
[운영체제] 4. CPU 스케줄링 | KOCW 2017 이화여대 반효경 교수님
* 강의를 듣고 복습하며 정리한 내용입니다. CPU 프로그램의 기계어 명령을 수행하는 컴퓨터 내 중앙 처리 장치 CPU 스케줄링 Ready Queue에 있는 프로세스 중 CPU를 줄 프로세스를 고르는 것. 운영체
donghae0230.tistory.com
전체 코드
import heapq
def solution(jobs):
n = len(jobs)
now = 0 # 현재 시간
answer = 0 # 소요시간의 합
count = 0 # 처리량
ready_queue = []
while count < n:
for i in range(n):
# 처리 되지 않은 작업이면서 요청 시간이 현재 시간보다 작은 경우
if jobs[i] and jobs[i][0] <= now:
heapq.heappush(ready_queue, (jobs[i][1], jobs[i][0]))
# Ready Queue에 들어간 작업은 False로 처리
jobs[i] = False
# Ready Queue에 처리할 작업이 있는 경우
if ready_queue:
size, request = heapq.heappop(ready_queue)
# 처리 후 시간을 현재 시간으로 갱신
now += size
answer += (now - request)
count += 1
else:
now += 1
return answer // n
✔ Ready Queue에 처리할 작업이 없어도 시간은 흘러가야 한다.
= 반복문 내 now 변수를 사용하자❕
* 처리할 작업이 있으면 소요시간을 더해 갱신하고 없으면 1 더하기
✔ 각 시점마다 작업의 소요시간이 가장 작은 작업을 처리해야 한다.
= 우선순위 큐를 사용하자❕
* 파이썬의 heapq 라이브러리 사용
'Problem Solving > Programmers' 카테고리의 다른 글
[프로그래머스] 가장 먼 노드 | 파이썬 (💡 최단 경로 알고리즘) (0) | 2022.06.08 |
---|---|
[프로그래머스] Level 2 k진수에서 소수 개수 구하기 | 파이썬 (👀10진수 변환하기) (0) | 2022.02.11 |
[프로그래머스] Level 1 모의고사 | 파이썬 | 완전탐색 (🌟 itertools.cycle 사용하기) (0) | 2022.02.07 |
[프로그래머스] Level 1 키패드 누르기 | 파이썬 (0) | 2021.07.29 |
[프로그래머스] Level 2 시저 암호 | 파이썬 (0) | 2021.07.16 |