22
33class Solution {
44 class Task {
5+ private int idx ;
56 private int requiredTime ;
67 private int spendTime ;
7- private int idx ;
88
9- public Task (int requiredTime , int spendTime , int idx ) {
9+ public Task (int idx , int requiredTime , int spendTime ){
10+ this .idx = idx ;
1011 this .requiredTime = requiredTime ;
1112 this .spendTime = spendTime ;
12- this .idx = idx ;
1313 }
1414 }
15-
1615 public int solution (int [][] jobs ) {
17- // jobs 정렬
16+
1817 Arrays .sort (jobs , (a ,b ) -> a [0 ] - b [0 ]);
1918
20- // 1. 소요시간 짧은거, 요청 빨리한거
21- PriorityQueue <Task > pq = new PriorityQueue <>((a ,b ) -> {
22- if (a .spendTime == b .spendTime ){
23- if (a .requiredTime == b .requiredTime ){
24- return a .idx - b .idx ;
19+ PriorityQueue <Task > waitQ = new PriorityQueue <>(new Comparator <Task >(){
20+ @ Override
21+ public int compare (Task t1 , Task t2 ){
22+ if (t1 .spendTime == t2 .spendTime ){
23+ if (t1 .requiredTime == t2 .requiredTime ){
24+ return t1 .idx - t2 .idx ;
25+ }
26+ return t1 .requiredTime - t2 .requiredTime ;
2527 }
26- return a . requiredTime - b . requiredTime ;
28+ return t1 . spendTime - t2 . spendTime ;
2729 }
28- return a .spendTime - b .spendTime ;
29- });
30-
31- int currentTime = 0 ; // 현재 시간
32- int totalTime = 0 ; // 총 작업 시간
33- int complete = 0 ; // 작업 완료 갯수
34- int cnt = jobs .length ; // 작업 갯수
35- int jobIdx = 0 ; // 작업 번호
30+ });
3631
37- // 모든 작업이 완료될때까지 반복
32+ int complete = 0 ;
33+ int currentTime = 0 ;
34+ int jobIdx = 0 ;
35+ int cnt = jobs .length ;
36+ int totalTime = 0 ;
3837 while (complete < cnt ) {
3938
40- while (jobIdx < cnt && currentTime >= jobs [jobIdx ][0 ]) {
41- // 큐에 작업 추가
39+ while (jobIdx < cnt && jobs [jobIdx ][0 ] <= currentTime ){
4240 int requiredTime = jobs [jobIdx ][0 ];
4341 int spendTime = jobs [jobIdx ][1 ];
44- Task task = new Task ( requiredTime , spendTime , jobIdx );
45- pq . offer ( task );
46- jobIdx ++ ;
42+
43+ Task task = new Task ( jobIdx ++, requiredTime , spendTime );
44+ waitQ . offer ( task ) ;
4745 }
4846
49- // 동록된 작업 처리
50- if (! pq . isEmpty ()) {
51- Task task = pq . poll ();
47+ if (! waitQ . isEmpty ()){
48+ Task task = waitQ . poll ();
49+
5250 int requiredTime = task .requiredTime ;
5351 int spendTime = task .spendTime ;
52+ int idx = task .idx ;
5453
5554 currentTime += spendTime ;
56- complete ++ ;
57- totalTime += ( currentTime - requiredTime ) ;
55+ totalTime += currentTime - requiredTime ;
56+ complete ++ ;
5857 } else {
5958 currentTime = jobs [jobIdx ][0 ];
6059 }
6160 }
6261
63- return totalTime / complete ;
62+ return totalTime / cnt ;
6463 }
6564}
0 commit comments