일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- react firebase
- 컴퓨터 네트워크
- 자바스크립트
- 프로그래머스
- Java
- React JS
- 디자인 패턴
- 자바 공부
- 코딩테스트 고득점 Kit
- JavaScript
- 데이터모델링과마이닝
- 코틀린
- NextJS
- 백준
- 리액트
- websocket
- 리액트 훅
- useState
- design pattern
- codesandbox
- 프로그래머스 자바
- 장고
- 프로그래머스 완전탐색
- react
- useEffect
- 프로그래밍 언어론
- 코딩테스트 고득점 Kit 완전탐색
- react hook
- 자바
- vanillaJS
Archives
- Today
- Total
기록하는 개발자
[프로그래머스][코딩테스트 고득점 Kit][Javascript] 디스크 컨트롤러 본문
728x90
https://school.programmers.co.kr/learn/courses/30/lessons/42627?language=javascript
전체 코드
function solution(jobs) {
let answer = 0, index = 0, time = 0;
let queue = [];
// 오름차순 정렬
jobs.sort((a,b)=>a[0]-b[0]);
while(index<jobs.length || queue.length!=0){
// 현재 시간보다 작업 요청 시간이 빠르면 queue에 삽입
if(index < len && jobs[index][0] <= time){
queue.push(jobs[index++]);
// 배열의 두 번째 요소([i][1])를 기준으로 오름차순 정렬
queue.sort((a,b)=>a[1]-b[1]);
continue;
}
// queue의 길이가 0인 경우의 예시
// [[0, 5], [1, 10],[20, 3]] 의 경우
// 이전 두 태스크의 실행이 끝나고 5초 뒤에 세 번째 작업이 요청된다
if (queue.length == 0){
time = jobs[index][0];
}
// queue의 길이가 0보다 큰 경우
// 전체 작업의 요청부터 종료까지 걸린 시간
// = 이전까지의 작업 요청부터 종료까지 걸린 시간 + 현재 작업 시작 시간 + 작업 소요 시간 - 작업 요청 시간
else if(queue.length > 0){
let job = queue.shift();
answer+= time - job[0] + job[1];
time+=job[1];
}
}
// 각 작업의 요청부터 종료까지 걸린 시간의 평균
// 소수점 자리 버림
return Math.floor(answer/jobs.length);
}
728x90
'Algorithm' 카테고리의 다른 글
[프로그래머스][코딩테스트 고득점 Kit][Javascript] 모음 사전 (0) | 2023.08.14 |
---|---|
[프로그래머스][코딩테스트 고득점 Kit][java,javascript] 가장 먼 노드 (0) | 2023.08.14 |
[프로그래머스][코딩테스트 고득점 Kit][Javascript] 네트워크 (0) | 2023.08.13 |
[프로그래머스][코딩테스트 고득점 Kit][Javascript] 정수 삼각형 (0) | 2023.08.13 |
[프로그래머스][코딩테스트 고득점 Kit][Javascript] 모의고사 (0) | 2023.08.13 |