11import java .util .*;
2+
23class Solution {
34 class Task {
4- private int idx ; // 작업 번호
5- private int requiredTime ; // 요청 시간
6- private int spendTime ; // 소요 시간
5+ private int requiredTime ;
6+ private int spendTime ;
7+ private int idx ;
78
8- public Task (int idx , int requiredTime , int spendTime ){
9- this .idx = idx ;
9+ public Task (int requiredTime , int spendTime , int idx ) {
1010 this .requiredTime = requiredTime ;
1111 this .spendTime = spendTime ;
12- }
13-
14- @ Override
15- public String toString (){
16- // return "[%d,%d,%d]".formatted(this.idx,this.requiredTime,this.spendTime);
17- return "[" + this .idx + "," + this .requiredTime + "," + this .spendTime +"]" ;
12+ this .idx = idx ;
1813 }
1914 }
2015
2116 public int solution (int [][] jobs ) {
22- Arrays .sort (jobs ,(a ,b ) -> a [0 ] - b [0 ]);
17+ // jobs 정렬
18+ Arrays .sort (jobs , (a ,b ) -> a [0 ] - b [0 ]);
2319
24- PriorityQueue <Task > waitQ = new PriorityQueue <>(new Comparator <Task >(){
25- @ Override
26- public int compare (Task t1 , Task t2 ){
27- if (t1 .spendTime == t2 .spendTime ){
28- if (t1 .requiredTime == t2 .requiredTime ){
29- // 3. 작업 번호가 빠른거
30- return t1 .idx - t2 .idx ;
31- }
32- // 2. 요청 시간이 빠른거
33- return t1 .requiredTime - t2 .requiredTime ;
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 ;
3425 }
35- // 1. 소요시간이 짧은거
36- return t1 .spendTime - t2 .spendTime ;
26+ return a .requiredTime - b .requiredTime ;
3727 }
28+ return a .spendTime - b .spendTime ;
3829 });
3930
40- int currentTime = 0 ;
41- int jobIdx = 0 ;
42- int totalTime = 0 ;
43- int complete = 0 ;
44- while (complete < jobs .length ) {
31+ int currentTime = 0 ; // 현재 시간
32+ int totalTime = 0 ; // 총 작업 시간
33+ int complete = 0 ; // 작업 완료 갯수
34+ int cnt = jobs .length ; // 작업 갯수
35+ int jobIdx = 0 ; // 작업 번호
36+
37+ // 모든 작업이 완료될때까지 반복
38+ while (complete < cnt ) {
4539
46- while (jobIdx < jobs . length && currentTime >= jobs [jobIdx ][0 ]){
47- int idx = jobIdx ;
40+ while (jobIdx < cnt && currentTime >= jobs [jobIdx ][0 ]) {
41+ // 큐에 작업 추가
4842 int requiredTime = jobs [jobIdx ][0 ];
4943 int spendTime = jobs [jobIdx ][1 ];
50- Task task = new Task (idx , requiredTime ,spendTime );
51- waitQ .offer (task ); // 대기 큐 등록
52- jobIdx ++;
44+ Task task = new Task (requiredTime ,spendTime , jobIdx );
45+ pq .offer (task );
46+ jobIdx ++;
5347 }
5448
55- if (!waitQ .isEmpty ()) {
56- Task task = waitQ .poll ();
57- int spendTime = task .spendTime ;
58- int idx = task .idx ;
49+ // 동록된 작업 처리
50+ if (!pq .isEmpty ()) {
51+ Task task = pq .poll ();
5952 int requiredTime = task .requiredTime ;
53+ int spendTime = task .spendTime ;
6054
61- complete ++; // 완료 처리
62- currentTime += task . spendTime ; // 시간 갱신
63- totalTime += currentTime - task . requiredTime ;
55+ currentTime += spendTime ;
56+ complete ++;
57+ totalTime += ( currentTime - requiredTime ) ;
6458 } else {
6559 currentTime = jobs [jobIdx ][0 ];
6660 }
67-
6861 }
6962
70- int answer = totalTime / complete ;
71- return answer ;
63+ return totalTime / complete ;
7264 }
7365}
0 commit comments