풀이
스케쥴링 방법 중 하나인 SJF 방식이다.
1. 처리해야 할 작업 중 현재 기준으로 처리할 수 있는 작업을 선택
2. 선택한 작업을 가장 시간이 덜 걸리는 순으로 처리
1. 입력받은 jobs를 가장 먼저 도착하는 순서로 정렬을 수행한다.
2. 정렬된 jobs배열 중 처리 가능 한 Task를 우선순위 큐에 전부 삽입
3. 만약 큐가 비어있다면 => 현재까지 경과된 시간을 jobs배열의 다음 대상의 도착시간까지 당겨오고 , 2번으로
4. 큐에서 하나씩 빼면서 처리하면서 시간들 계산
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
import java.util.*;
import java.io.*;
class Solution {
public int solution(int[][] jobs) {
PriorityQueue<Task> q = new PriorityQueue<>();
Arrays.sort(jobs,(o1,o2)->o1[0]-o2[0]);
int curTime = 0;
int totalRuntime=0;
for(int i=0;i<jobs.length || !q.isEmpty();){
while(i< jobs.length && jobs[i][0]<=curTime){
q.add(new Task(jobs[i][0], jobs[i][1]));
i++;
}
if(q.isEmpty()) curTime = jobs[i][0];
else{
Task poll = q.poll();
totalRuntime += curTime - poll.arriveTime + poll.runTime;
curTime += poll.runTime;
}
}
return totalRuntime/jobs.length;
}
static class Task implements Comparable<Task>{
int arriveTime;
int runTime;
public Task(int arriveTime,int runTime){
this.arriveTime=arriveTime;
this.runTime=runTime;
}
@Override
public int compareTo(Task o){
return this.runTime-o.runTime;
}
}
}
|
cs |
'알고리즘,PS > 프로그래머스' 카테고리의 다른 글
[프로그래머스] [Level2] 소수찾기 JAVA (0) | 2021.10.20 |
---|---|
[프로그래머스] [위클리 챌린지 11주차] 아이템줍기 JAVA (2) | 2021.10.19 |
[BOJ] 백준 [9466] 텀 프로젝트 JAVA (0) | 2021.10.17 |
[프로그래머스] [위클리 챌린지 9주차] 전력망을 둘로 나누기 JAVA (0) | 2021.10.05 |
[프로그래머스] 섬 연결하기[Level3] JAVA (0) | 2021.08.09 |