프로그래머스 LEVEL 3(디스크 컨트롤러)
-
사용 언어 : 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