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

J-Keonho·2020년 9월 10일
0
post-custom-banner

해당 알고리즘 자료는 제가 직접 푼 것도 있지만 다른 분들의 풀이과의 비교를 통해 더 나은 알고리즘을 공부하기 위해 정리한 것들입니다.

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

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

풀이 : PriorityQueue를 이용하여 소모시간을 구하여 평균을 구한다.

import java.util.*;
class Solution {
    public int solution(int[][] jobs) {
    	Arrays.sort(jobs, new Comparator<int[]>() {
	public int compare (int [] a, int [] b) {
		return a[0] - b[0];
	}
	});
		
        PriorityQueue <int[]> pq = new PriorityQueue<int[]>(new Comparator<int[]>() {
		@Override
		public int compare(int[] a, int[] b) {
			return a[1] - b[1];
		}
	});
			
	int time = 0, idx = 0, answer = 0;
		
	while(true) {
		while(idx < jobs.length && jobs[idx][0] <= time) { // 시작시간이 제일 빠른 것 중에서 time보다 작거나 같은 요청을 추가
			pq.add(jobs[idx++]);
		}
		if(pq.size() == 0) { // pq가 0이면 다음 요청으로 넘어간다.
			time = jobs[idx][0];
			continue;
		}
		int [] job = pq.poll();
		time += job[1];
		answer += time - job[0];
		if(idx == jobs.length && pq.size() == 0) break;
	}
	answer /= jobs.length;
        return answer;
		
	}
}
profile
안녕하세요.
post-custom-banner

0개의 댓글