디스크 컨트롤러(프로그래머스)

정승옥(seungok)·2021년 3월 1일
0

프로그래머스

목록 보기
33/40
post-thumbnail

문제설명

  • [ 작업 요청 시점, 작업 시간] 을 담은 2차원 배열 jobs
  • 작업의 요청부터 종료까지 걸린 시간들의 평균을 구하여 반환해야 한다.
  • 요청이 들어온 순서대로 작업이 진행하면 최소시간을 보장하지 못한다.

제한사항

  • 하드디스크가 작업을 수행하지 않을 때에는 먼저 요청이 들어온 작업부터 처리한다.
  • 요청 시점은 0 이상 1000 이하
  • 작업 시간은 1 이상 1000 이하

문제풀이

function solution(jobs) {
	let answer = 0;
	let time = 0;
	let j = 0;

	const priorityJobs = jobs.sort((a, b) => a[0] - b[0]);
	const priorityQueue = [];

	while (j < priorityJobs.length || priorityQueue.length !== 0) 
    	{
		if (priorityJobs.length > j && time >= priorityJobs[j][0]) {
			priorityQueue.push(priorityJobs[j++]);
			console.log(priorityQueue);
			priorityQueue.sort((a, b) => a[1] - b[1]);
			continue;
		}

		if (priorityQueue.length !== 0) {
			time += priorityQueue[0][1];
			answer += time - priorityQueue[0][0];
			priorityQueue.shift();
			console.log(priorityQueue);
		} else time = priorityJobs[j][0];
	}
	return Math.floor(answer / priorityJobs.length);
}

+ 다시 풀었을때 나의 코드

체크포인트

  1. 작업 요청 순서대로 정렬한다.
  2. 작업 진행 시점 time 보다 요청시점이 작은 작업들을 우선순위 목록에 담는다.
  3. 우선순위 목록에 담긴 작업들 중 작업시간이 가장 짧은 작업을 뽑아 작업한다.
  4. 작업 시간만큼 진행 시점이 증가하고 요청시점을 뺀 시간의 합 answer 에 더한다.
  5. (요청시점을 뺀 시간의 합) / 작업의 수 를 결과값으로 반환한다.
  6. 주의사항 : 작업이 남아있을때 time 보다 요청 시점이 늦을 경우 time요청 시점으로 변경한다.
profile
Front-End Developer 😁

0개의 댓글