코딩 테스트 풀이 체크리스트 |
|
2시간 내에 풀었는가? | X |
본인의 실력으로 풀었는가? | △ |
코딩테스트 연습 - 디스크 컨트롤러
하드디스크는 한 번에 하나의 작업만 수행할 수 있습니다. 디스크 컨트롤러를 구현하는 방법은 여러 가지가 있습니다. 가장 일반적인 방법은 요청이 들어온 순서대로 처리하는 것입니다. 예를
programmers.co.kr
import java.util.*;
class Solution {
public int solution(int[][] jobs) {
int answer = 0;
//요청시간 순으로 정렬해놓은 큐
PriorityQueue<Job> waiting = new PriorityQueue<>(new Comparator<Job>(){
@Override
public int compare(Job j1, Job j2) {
return j1.start - j2.start;
}
});
//작업시간 순으로 정렬할 큐
PriorityQueue<Job> working = new PriorityQueue<>(new Comparator<Job>(){
@Override
public int compare(Job j1, Job j2) {
return j1.work - j2.work;
}
});
//waiting에 넣기
for (int i = 0; i < jobs.length; i++) {
waiting.offer(new Job(jobs[i][0], jobs[i][1]));
}
int count = 0; //몇 개 처리됬는지 파악할 변수
int time = 0; //작업이 끝나는 시간을 담을 변수
while (count < jobs.length) {
//waiting이 비어있지 않고, 작업이 끝나는 시간 이전에 요청이 들어온 것이 있다면
//꺼내서 working에 넣기
while (!waiting.isEmpty() && time >= waiting.peek().start) {
working.offer(waiting.poll());
}
//만약에 working이 비어있지 않으면
if (!working.isEmpty()) {
//작업시간이 가장 짧은 즉, working 가장 처음에 있는 것을 꺼내서 계산하기
//time은 작업이 끝나자마자 새로운 작업이 시작되기 때문에 해당 새로운 작업의 작업 시간 추가
//answer은 총 시간이기 때문에 작업이 완전히 끝나는 시간부터 요청이 들어온 시간을 뺀 값을 추가하기
//count는 작업 하나가 끝났기 때문에 1 더하기
Job job = working.poll();
time += job.work;
answer += (time - job.start);
count++;
} else {
//working이 비어있으면 time + 1
time++;
}
}
//총 시간에서 jobs의 갯수로 나눠서 리턴
return answer / jobs.length;
}
}
class Job {
int start, work;
public Job(int start, int work) {
this.start = start;
this.work = work;
}
}
테스트 1 〉 | 통과 (2.76ms, 73.2MB) |
테스트 2 〉 | 통과 (2.25ms, 75.8MB) |
테스트 3 〉 | 통과 (2.76ms, 70.8MB) |
테스트 4 〉 | 통과 (3.04ms, 76.6MB) |
테스트 5 〉 | 통과 (2.41ms, 74.2MB) |
테스트 6 〉 | 통과 (0.85ms, 65.4MB) |
테스트 7 〉 | 통과 (2.74ms, 73.5MB) |
테스트 8 〉 | 통과 (2.23ms, 73.9MB) |
테스트 9 〉 | 통과 (1.45ms, 73.8MB) |
테스트 10 〉 | 통과 (2.57ms, 77MB) |
테스트 11 〉 | 통과 (0.85ms, 78.7MB) |
테스트 12 〉 | 통과 (1.25ms, 77.6MB) |
테스트 13 〉 | 통과 (1.20ms, 74MB) |
테스트 14 〉 | 통과 (1.23ms, 75.6MB) |
테스트 15 〉 | 통과 (1.19ms, 75.7MB) |
테스트 16 〉 | 통과 (0.96ms, 76.5MB) |
테스트 17 〉 | 통과 (1.11ms, 77.6MB) |
테스트 18 〉 | 통과 (1.18ms, 76.1MB) |
테스트 19 〉 | 통과 (0.79ms, 75.1MB) |
테스트 20 〉 | 통과 (1.13ms, 80.7MB) |
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[Java] 프로그래머스 - 소수 찾기 (2단계) (0) | 2022.05.24 |
---|---|
[Java] 프로그래머스 - 가장 큰 수 (2단계) (0) | 2022.05.23 |
[Java] 프로그래머스 - 프린터 (2단계) (0) | 2022.05.12 |
[Java] 프로그래머스 - 전화번호 목록 (2단계) (0) | 2022.05.11 |
[Java] 프로그래머스 - 리틀 프렌즈 사천성 (3단계) (0) | 2022.05.10 |