알고리즘문제풀이/프로그래머스

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

초보개발자.. 2021. 8. 7. 14:08

--문제--

https://programmers.co.kr/learn/courses/30/lessons/42627

 

코딩테스트 연습 - 디스크 컨트롤러

하드디스크는 한 번에 하나의 작업만 수행할 수 있습니다. 디스크 컨트롤러를 구현하는 방법은 여러 가지가 있습니다. 가장 일반적인 방법은 요청이 들어온 순서대로 처리하는 것입니다. 예를

programmers.co.kr

--문제 접근--

현재시간을 고려하면서 현재시간 내에서 처리할 수 있는 가장 짧은 소요시간을 먼저 처리하는 방식으로 진행하였습니다.

package Level3;

import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.PriorityQueue;

public class 디스크컨트롤러 {
	public static void main(String[] args) {
		int[][] temp= {{1, 9},{2, 6},{0,3}};
		int r=solution(temp);
		System.out.println(r);
	}
	 public static int solution(int[][] jobs) {
	        int answer = 0;
	        PriorityQueue<int[]> pq=new PriorityQueue<>(new Comparator<int[]>() {
				@Override
				public int compare(int[] o1, int[] o2) {
					return o1[1]-o2[1];
				}
			});
	        Arrays.sort(jobs,new Comparator<int[]>() {
				@Override
				public int compare(int[] o1, int[] o2) {
					
					return o1[0]-o2[0];
				}
			});
	        int cur=0;
	        int idx=0;
	        //시간순으로 가장빠른것을 처리함녀서 그 처리 한 시간내에서 가장빠른 소요시간을 먼저 처리하는 형식
	        while(idx<jobs.length||!pq.isEmpty()) {
	        	while(idx<jobs.length&&jobs[idx][0]<=cur) {
	        		pq.add(new int[] {jobs[idx][0],jobs[idx][1]});
	        		idx++;
	        	}
	        	if(pq.isEmpty()) cur=jobs[idx][0];
	        	else {
	        		int[] temp=pq.poll();
	        		answer+=cur+temp[1]-temp[0];
	        		cur+=temp[1];
	        	}
	        }
	        answer/=jobs.length;
	        return answer;
	    }
}