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

image

  • 사용 언어 : javascript

  • 해결 날짜 : 2022-12-17

  • 해결 방법 :

    • 인자로 받은 jobs 깊은 복사(works)
    • works가 비어 있지 않은 동안,
      • 현재 시간(time)보다 작거나 같은 work를 소요 시간에 따라 오름차순 정렬 (disk)
      • 현재 시간(time)보다 큰 work filter (rest)
      • disk에 값이 존재하면 (현재 시간에 수행할 수 있는 작업이 있는 경우)
        • 소요 시간이 가장 작은 작업을 뽑아
        • time에 현재 작업의 소요시간(duration) 더하기
        • answer에 time - 현재 작업의 요청 시간(requestTime) 더하기
      • 값이 존재하지 않으면 disk가 비어 있지 않을 때 까지 time += 1
      • works 업데이트 (disk + rest)
    • 반복문 종료 후 나온 answer은 모든 작업의 총 처리 시간의 합이므로 작업의 수 만큼 나눠주고 반환
  • 회고 :

    • x
  • 코드

    function solution(jobs) {
      let answer = 0;
      let time = 0;
      let works = [...jobs];
    
      while (works.length) {
        const disk = works.filter((work) => work[0] <= time).sort((a, b) => a[1] - b[1]);
        const rest = works.filter((work) => work[0] > time);
    
        if (disk.length) {
          const [requestTime, duration] = disk.shift();
          time += duration;
          answer += time - requestTime;
        } else time += 1;
    
        works = [...disk, ...rest];
      }
    
      return Math.floor(answer / jobs.length);
    }
    
  • 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges