Skip to content

Commit 034b068

Browse files
committed
[level 3] Title: 디스크 컨트롤러, Time: 4.89 ms, Memory: 83.2 MB -BaekjoonHub
1 parent f80e04e commit 034b068

File tree

2 files changed

+38
-46
lines changed

2 files changed

+38
-46
lines changed

프로그래머스/3/42627. 디스크 컨트롤러/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
### 성능 요약
66

7-
메모리: 90.5 MB, 시간: 4.00 ms
7+
메모리: 83.2 MB, 시간: 4.89 ms
88

99
### 구분
1010

@@ -16,7 +16,7 @@
1616

1717
### 제출 일자
1818

19-
2025년 09월 02일 15:52:33
19+
2025년 09월 06일 16:34:17
2020

2121
### 문제 설명
2222

Lines changed: 36 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,73 +1,65 @@
11
import java.util.*;
2+
23
class 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

Comments
 (0)