-
[프로그래머스] 힙 - 디스크 컨트롤러알고리즘 공부/문제 풀이 2020. 8. 12. 00:00
https://codevang.tistory.com/316 참고하여 해결하였다.
import java.util.*; class Job{ int s; //요청된 시간 int t; // 걸리는 작업 시간 public Job(int s,int t){ this.s=s; this.t=t; } } class Solution { public int solution(int[][] jobs) { int answer = 0; int end = 0; // 수행되고난 직후의 시간 int jobsIdx = 0; // jobs 배열의 인덱스 int count = 0; // 수행된 요청 갯수 // 원본 배열 오름차순 정렬 (요청시간 오름차순) Arrays.sort(jobs, (o1, o2) -> o1[0] - o2[0]); // 처리 시간 오름차순으로 정렬되는 우선순위 큐(Heap) PriorityQueue<int[]> pq = new PriorityQueue<>((o1, o2) -> o1[1] - o2[1]); // 요청이 모두 수행될 때까지 반복 while (count < jobs.length) { // 하나의 작업이 완료되는 시점(end)까지 들어온 모든 요청을 큐에 넣음 while (jobsIdx < jobs.length && jobs[jobsIdx][0] <= end) { pq.add(jobs[jobsIdx++]); } // 큐가 비어있다면 작업 완료(end) 이후에 다시 요청이 들어온다는 의미 // (end를 요청의 가장 처음으로 맞춰줌) if (pq.isEmpty()) { end = jobs[jobsIdx][0]; // 작업이 끝나기 전(end 이전) 들어온 요청 중 가장 수행시간이 짧은 요청부터 수행 } else { int[] temp = pq.poll(); answer += temp[1] + end - temp[0]; end += temp[1]; count++; } } return (int) Math.floor(answer / jobs.length); } }
'알고리즘 공부 > 문제 풀이' 카테고리의 다른 글
[프로그래머스] 완전탐색 - 카펫 (1) 2020.08.16 [프로그래머스] 완전 탐색 - 모의고사 (1) 2020.08.14 [프로그래머스] 힙 - 더 맵게 (1) 2020.08.11 [프로그래머스] 스택/큐 - 프린터 (1) 2020.08.11 [프로그래머스] 스택/큐 - 다리를 지나는 트럭 (1) 2020.08.11