반응형
package com.ji.main;

import java.util.Arrays;
import java.util.PriorityQueue;

public class DiscoController {

	public static void main(String[] args) {
		int result = solution(new int[][] { { 0, 3 }, { 1, 9 }, { 2, 6 } });
		System.out.println(result);
	}

	public static int solution(int[][] jobs) {
		int answer = 0;
		int count = 0;// 처리된 디스크
		int now = 0;// 작업이 끝난시간

		//요청시간 순으로 오름 차순 정렬
		Arrays.sort(jobs, ((o1, o2) -> o1[0] - o2[0]));

		// 처리 시간 오름 차순 정렬되는 우선 순위 큐
		PriorityQueue<int[]> queue = new PriorityQueue<>(((o1, o2) -> o1[1] - o2[1]));
		
		int i = 0;
		while (count < jobs.length) {
			
			// 하나의 작업이 완료될때까지 모든 요청을 큐에 넣음
			while (i < jobs.length && jobs[i][0] <= now) {
				queue.add(jobs[i++]);
			}

			// queue가 비어있을 경우는 작업 완료 이후
			if (queue.isEmpty()) {
				now = jobs[i][0];//다음 작업의 요청 시작 시작으로 맞춰줌
			} else { 
				//우선순위 큐에 의해서 수행 시간이 가장 짧은 처리 디스크 반환
				int[] tmp = queue.poll();
				answer += tmp[1] + now - tmp[0];
				now += tmp[1];
				count++;
			}
		}

		return answer / jobs.length;
	}

}
728x90

'[개발관련] > 코테준비' 카테고리의 다른 글

[프로그래머스] 여행경로  (0) 2021.09.22
[프로그래머스] 네트워크  (0) 2021.08.07
[프로그래머스] 체육북  (0) 2021.08.07
[백준] 최소 신장 트리  (0) 2021.08.07
[백준] 소문난 칠공주  (0) 2021.08.07

+ Recent posts