programmers_디스크 컨트롤러_java

2023. 3. 13. 14:45Algorithm/Programmers

728x90

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

import java.util.*;

class Solution {
    public int solution(int[][] jobs) {
        int answer = 0;
        
        // 시작 시간이 작은 순서 정렬
        Arrays.sort(jobs, (o1, o2) -> o1[0] - o2[0]);
        
        int jobsSize = jobs.length;
        int start = 0; // 현재 진행중인 시작점
        int end = 0; // 현재 진행중인 끝점
        int jobIdx = 0;
        int cnt = 0;
        PriorityQueue<int[]> pq = new PriorityQueue<>((o1, o2) -> o1[1] - o2[1]);
        
        while(true){
            
            while(jobIdx < jobsSize && jobs[jobIdx][0] <= end){
                pq.offer(jobs[jobIdx++]);
            }
            
            if(pq.isEmpty()){
                end = jobs[jobIdx][0]; // 비어있는 경우 가장 먼저 시작되는 작업
            }else{
                int[] now = pq.poll();
				answer += now[1] + end - now[0]; // 소요 시간 + 시작 시간 - 요청시간
				end += now[1]; // 현재 작업 종료 시간
                cnt++; // 완료 작업 추가
            }
            if(cnt == jobsSize) break; // 모든 작업 종료
        }
        
        
        return answer/jobsSize;
    }
}