Problem : 디스크 컨트롤러
유형 : 힙
해결전략
- 작업 요청으로부터 종료까지 걸린시간의 평균을 최소화 하라.
문제 재해석
jobs
은 최대 500개 이다.- 스케줄링 알고리즘 중 하나인
SJF
알고리즘이다.
해결 전략
- 작업을 진행 하는 동안, 들어온 작업들 중 가장 빨리 끝낼 수 있는 작업을 처리한다.
SJF
를 구현한다.
설계, 구현
우선순위 큐
를 이용해서, 시작 되는 순서를 정했다.우선순위 큐
를 이용해서, 가장 빨리 끝낼 수 있는 작업을 구했다.- 요청 되는 시점 순으로 관리한다.
- 작업이 종료된 후 다음 작업을 고를때, 요청된 시간을 보고 , 작업 시간 기준으로 이전에 들어온 작업들을
작업큐
에 넣었다. - 한 작업이 끝날때 마다 시간이 변하므로 계속 확인해준다.
주의할 점
- 작업큐의 모든 과정을 끝냈지만, 이전에 아무런 요청이 들어오지 않은 경우를 처리 해줘야 한다.
3초
에 모든 작업이 끝. 다음 작업은5초
에 요청 되어짐.- 이런 경우를 처리할 수 있어야 한다.
디버깅
first
second
를 잘못 뒤섞어 썼었다.while
문 종료 조건을 잘못 주었다.
코드
cpp
1 |
|
java
1 |
|
피드백
- 처음에는
naive
하게 그냥 시간을 순차적으로 진행 시킬까 했는데 시간 복잡도를 고려해보니5억
이 나와서, 좀 더 고민하고 구현 했다. 이점은 잘한듯 pair
의 앞 뒤를 바꿔야 하는 경우, 매크로 함수를 사용하지 말자- 탈출 조건, 종료 조건은 항상 고민을 한번만 더 해보자.