‘프로그래머스 코딩테스트 고득점 Kit’ 문제 입니다. 😀
문제 👉 <코딩테스트 연습 - 디스크 컨트롤러 | 프로그래머스>
1. 문제
작업의 요청부터 종료까지 걸린 시간이 가장 줄이는 방법으로 작업을 수행하여 각 작업의 요청부터 종료까지 걸린 시간의 평균을 return 한다.
2. 풀이
PriorityQueue
를 이용한 문제 풀이
- 작업의 소요시간을 오름차순으로 유지하기 위해
PriorityQueue
로 나타낸다. - 작업의 요청시점을 오름차순으로 정렬
Arrays.sort(jobs, (o1, o2) -> o1[0] - o2[0]);
- 현재 시간 보다 작거나 같은 요청 시간 큐에 추가
- 큐에 작업이 없다면 작업 요청시점이 가장 빠른 작업 추가
- 큐에 작업이 있다면 작업 소요시간이 가장 빠른 작업 수행
3. 코드
import java.util.*;
class Solution {
public int solution(int[][] jobs) {
int answer = 0;
int time = 0;
int idx = 0;
int len = jobs.length;
// 작업의 소요시간 오름차순
Queue<int[]> pq = new PriorityQueue<>((o1, o2) -> o1[1] - o2[1]);
// 작업 요청시점 오름차순
Arrays.sort(jobs, (o1, o2) -> o1[0] - o2[0]);
while (!pq.isEmpty() || idx < len) {
// 현재 시간 보다 작거나 같은 요청시점을 큐에 추가
while (idx < len && jobs[idx][0] <= time) {
pq.offer(jobs[idx++]);
}
// 큐에 작업이 없다면
if (pq.isEmpty()) {
// 작업 요청시점이 가장 빠른 작업 추가
time = jobs[idx][0];
}
// 큐에 작업이 있다면
else {
// 작업 소요시간이 가장 빠른 작업 수행
int[] job = pq.poll();
time += job[1];
answer += time - job[0];
}
}
return answer / len;
}
}
References
🏋🏻 개인적으로 공부한 내용을 기록하고 있습니다.
잘못된 부분이 있다면 과감하게 지적해주세요!! 🏋
'Coding Test > Programmers' 카테고리의 다른 글
[프로그래머스] 이중우선순위큐 [JAVA(자바)] (0) | 2021.11.25 |
---|---|
[프로그래머스] 더 맵게 [JAVA(자바)] (0) | 2021.11.25 |
[프로그래머스] 프린터 [JAVA(자바)] (0) | 2021.11.25 |
댓글