programmers/Lv 3

디스크 컨트롤러 [자바]

Meluu_ 2025. 10. 22. 19:50

 

🧫 문제 분석

✔️ 출처

디스크 컨트롤러 level 3

📖 문제

 

우선순위 큐를 이용한 시간 관련 문제

 

입력이 요청 시간 순으로 들어오는게 아니라서 요청 시간별로 정렬해주고

우선순위 큐는 문제에서 말한대로 정렬해준다.

 

현재 시간에 요청된 작업이 있다면 우선순위 큐에 넣고

 

작업을 꺼내서 처리한다. 

만약 작업이 없다면, 즉, 현재 시간까지 요청된 작업이 없다면 

현재 작업 인덱스의 작업 요청 시간으로 현재시간을 변경한다.

 

 


🔅 문제 풀이

import java.util.*;

class Solution {
    
    class Job {
        int num, req, cost;
        
        public Job(int num, int req, int cost) {
            this.num = num;
            this.req = req;
            this.cost = cost;
        }
    }
    
    public int solution(int[][] jobs) {
        int n = jobs.length;
        int answer = 0;
        
        Job[] arr = new Job[n];
        
        for (int i = 0; i < jobs.length; i++) {
            arr[i] = new Job(i, jobs[i][0], jobs[i][1]);
        }
        
        Arrays.sort(arr,(o1, o2) -> o1.req - o2.req);
        
        
        // 소요시간, 요청시간
        PriorityQueue<Job> pq = new PriorityQueue<>((o1, o2) -> {
            if (o1.cost != o2.cost) {
                return o1.cost - o2.cost;
            }
            return o1.req - o2.req;
        });
        
        int time = 0;
        int finish = 0;
        int i = 0; 
        //각 작업물을 순서대로 저장
        while (true) {
            if (finish == n) break;
            while (i < n && arr[i].req <= time) {
                pq.add(arr[i++]);
            }
            
            // 작업 꺼내기 
            if (!pq.isEmpty()) {
                Job cur = pq.poll();
            
                // 작업 끝낸 시간으로 이동
                time += cur.cost;
                answer += (time - cur.req);
                finish++;
            } else {
                time = arr[i].req;
            }
        }
        
        return answer / n;
    }
}

 

 

🔅 리팩토링

❗ 오답노트 / 필요한 지식

  1. 많이 부족하다. 더 생각하고 고민하는 과정이 필요하다. 
  2. 문제는 항상 불친절하다. 항상 의심하자.

 

'programmers > Lv 3' 카테고리의 다른 글

최적의 행렬 곱셈 [자바]  (0) 2025.11.10
2차원 동전 뒤집기 [자바]  (0) 2025.11.07
연속 펄스 부분 수열의 합 [자바]  (0) 2025.02.26
섬 연결하기 [자바]  (0) 2025.02.25
기지국 설치 [자바]  (1) 2025.02.21