카테고리 없음
디스크 스케줄러(작성중)
성추
2025. 5. 20. 22:18
import java.util.*;
class Solution {
//작업의 소요시간이 짧은 것, 작업의 요청 시각이 빠른 것, 작업의 번호가 작은 것
public int solution(int[][] jobs) {
int answer = 0;
//Job 클래스 만들고 작업 소요시간 , 작업 요청 시각, 작업 번호를 저장
//우선순위 큐 만들기. Comparator로 우선순위
PriorityQueue<Job> pq = new PriorityQueue<Job>(new Comparator<Job>(){
@Override
public int compare(Job j1 , Job j2){
if(j1.spend==j2.spend){
if(j1.request==j2.request){
return j1.num - j2.num;
}
else{
return j1.request-j2.request;
}
}
else{
return j1.spend-j2.spend;
}
}
});
for(int i=0; i<jobs.length; i++){
pq.add(new Job(jobs[i][0],jobs[i][1],i));
}
//job 평균 저장 위한 배열 만들기 , jobs.length
int[] arr = new int[jobs.length];
//0 3 / 3 5 / 1 9
int time =0;
int index=0;
while(!pq.isEmpty()){
Job now = pq.poll();
while(now.request>time){
time++;
}
int start = time;
while(now.spend!=0){
time++;
now.spend--;
}
int end = time;
arr[index++]= end - now.request;
}
//평균 계산
int total=0;
for(int i=0; i<arr.length; i++){
total +=arr[i];
}
answer = total/arr.length;
return answer;
}
public static class Job{
int request;
int spend;
int num;
public Job(int request , int spend, int num){
this.spend=spend;
this.request=request;
this.num = num;
}
}
}
틀린 풀이