카테고리 없음

디스크 스케줄러(작성중)

성추 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;
        }
    }
}

틀린 풀이