Skip to content

Commit 6af7c70

Browse files
committed
[level 3] Title: 디스크 컨트롤러, Time: 5.89 ms, Memory: 76.9 MB -BaekjoonHub
1 parent a1e42a3 commit 6af7c70

File tree

2 files changed

+32
-33
lines changed

2 files changed

+32
-33
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-
메모리: 83.2 MB, 시간: 4.89 ms
7+
메모리: 76.9 MB, 시간: 5.89 ms
88

99
### 구분
1010

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

1717
### 제출 일자
1818

19-
2025년 09월 06일 16:34:17
19+
2025년 09월 15일 19:58:21
2020

2121
### 문제 설명
2222

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

Lines changed: 30 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -2,64 +2,63 @@
22

33
class 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

Comments
 (0)