[프로그래머스] 디스크 컨트롤러 42627 (JAVA)

dia·2024년 1월 19일
0

풀이 방식

  1. 요청시간 순서대로 정렬
  2. 소요시간이 적은 순서대로 정렬되는 우선순위 큐 생성
  3. 요청시간에 따라 작업들을 모아서 처리 반복
    3-1. 현재시간이 되기 전에 요청한 작업들을 우선순위 큐에 저장
    3-2. 우선순위 큐가 비었다면 현재 시간을 다음 작업 요청시간으로 갱신
    3-3. 우선순위 큐에 있는 작업들을 처리
  4. 작업 완료를 기다린 평균 시간 계산, 소수점 이하는 버리기

구현

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

public class NUM42627 {
    public static void main(String[] args) {
        int[][] jobs = {{1, 3}, {1, 9}, {1, 6}, {20, 6}, {20, 6}, {20, 6}};
        System.out.println(solution(jobs));
    }

    public static int solution(int[][] jobs) {
        int answer = 0;
        Arrays.sort(jobs, (j1, j2) -> j1[0] - j2[0]);
        PriorityQueue<int[]> requests = new PriorityQueue<>((j1, j2) -> j1[1] - j2[1]);

        int finish = 0; int request = 0; int now = 0;
        while(finish < jobs.length) {
            while(request < jobs.length && jobs[request][0] <= now) { requests.add(jobs[request++]); }

            if(requests.isEmpty()) { now = jobs[request][0]; }
            else {
                int[] job = requests.poll();
                answer += ((now += job[1]) - job[0]);
                finish++;
            }
        }

        answer = (int) Math.floor(answer / jobs.length);
        return answer;
    }
}

*다른 분들의 코드를 참고하여 작성했습니다

profile
CS 메모장

0개의 댓글