알고리즘문제풀이/프로그래머스
[프로그래머스]디스크컨트롤_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;
}
}