
import java.io.*;
import java.util.*;
class Solution {
public int solution(int[][] jobs) {
Arrays.sort(jobs,(a,b)->a[0]-b[0]);
PriorityQueue<int[]>pq=new PriorityQueue<>((a,b)->a[1]-b[1]);
int idx=0;
int done=0;
int totaltime=0;
int now=0;
while(done<jobs.length){
while(idx<jobs.length && jobs[idx][0]<=now){
pq.add(jobs[idx++]);
}
// 그 자리로 바로 이동 [[5,9],[12,3]]
if(pq.isEmpty()){
now=jobs[idx][0];
}
else{
// 끝나는 시간을 기준으로 요청시간을 뺀다.
int[]job=pq.poll();
now+=job[1];
totaltime+=(now-job[0]);
done++;
}
}
return totaltime/jobs.length;
}
}
디스크 컨트롤러 개인적으로 처음 도착한 순서대로 정렬하고 만약 그렇지 않으면 코드가 반복적으로 되돌아 가면서 확인해서 O(n^2) 이라는 시간 복잡도가 나온다. (도착한 시간대로 정렬해주자)
포인터가 있고 작업의 개수를 세주는 변수도 있어야 한다.
PriortityQueue<int[]> 요청시간 ,소요시간 이렇게 2개의 값을 써야 할 때 무조건 필요하다.
그리고 소요시간을 기준으로 정렬하고 현재 시간을 기준으로 요청시간이 짧다면 계속 넣은 다음 정렬해서 뽑아 내는 이 아이디어가 중요한 문제인 거 같다. (어렵지는 않다.)
'프로그래머스 백준 문제' 카테고리의 다른 글
| 이중 우선순위 큐 (0) | 2026.09.13 |
|---|---|
| 전화번호 목록 (0) | 2026.07.24 |
| 프로그래머스 Hash 문제 (이거는 보자) (0) | 2026.07.22 |
| 프로그래머스 HashMap 기본문제 (0) | 2026.07.22 |
| 코테 Scanner 객체 사용법 (0) | 2026.07.21 |