[프로그래머스] 디스크 컨트롤러

2020. 5. 2. 14:18프로그래머스/LEVEL 3

import java.util.*;

class Solution {
    
    class Job implements Comparable<Job>{
        int requestTime;
        int needTime;
        
        Job(int requestTime, int needTime) {
            this.requestTime = requestTime;
            this.needTime = needTime;
        }
    
        @Override
        public int compareTo(Job target) {
       return  this.needTime -target.needTime;
        }
        
    }
    
    
    public int solution(int[][] jobs) {
        int answer = 0;
        int time=0;
        PriorityQueue<Job> pq = new PriorityQueue<>();
        List<Job> jobList = new ArrayList<>();
        
        for(int i=0; i<jobs.length; i++){
            pq.add(new Job(jobs[i][0],jobs[i][1]));
        }
        
        while(!pq.isEmpty()){
            Job job = pq.peek();
            jobList.add(job);
            pq.poll();
        }
        
        while(jobList.size()>0){
            for(int i=0; i<jobList.size(); i++){
            if(jobList.get(i).requestTime <= time){
                time += jobList.get(i).needTime;
                answer += time - jobList.get(i).requestTime;
                jobList.remove(i);
                break;   
            }
                if(i==jobList.size()-1){
                time++;
                }
            }
        }
         
        return answer/jobs.length;
    }
}

 요청시간과 작업시간을 담고 있는 Job 클래스를 만들어 주었다.

이 Job들을 List에 넣은다음 소요시간에 따라 정렬을 할까 하다가,

우선순위 큐를 이용함으로서 정렬 로직을 짜지 않아도 되었다.

소요시간이 짧은순으로 jobList가 만들어 졌기 때문에,

for문을 통해 현재시간에 작업가능한 Job이 있는 경우 해당 작업을 실행하고 현재시간을 업데이트 해주었고,

현재시간에 작업가능한 Job이 없는 경우 1초를 ++ 해주었다.  

 

'프로그래머스 > LEVEL 3' 카테고리의 다른 글

[프로그래머스] 이중 우선순위 큐  (0) 2020.05.08
[프로그래머스] 베스트 앨범  (0) 2020.05.08