-
[Javascript] 프로그래머스 기능 개발알고리즘, 자료구조/프로그래머스 2020. 6. 26. 14:20
문제
https://programmers.co.kr/learn/courses/30/lessons/42586#
작업 진도, 작업 속도가 주어지고 둘의 합이 100 이상 되어야 배포가 가능하다. 또한 뒷 작업이 먼저 완료되었다 하더라도 앞 작업이 배포되어야 뒷 작업도 배포될 수 있다. 즉, 뒷 작업이 앞에 작업보다 먼저 배포될 수 없다. 큐 개념을 이용해 문제를 풀었고, 배포된 작업들은 배열에서 삭제되기 때문에 시간 복잡도는 O(log n)이 되지 않을까 생각한다. 이 문제에서 생각해야 될 부분은 앞 작업이 배포될 때까지 뒷 작업은 배포될 수 없는 것, 모든 작업은 하루에 각 작업 속도만큼 진행이 된다는 것이다.
풀이 방법
function solution(progresses, speeds) { let result = []; let doneList = []; // progresses 내 요소가 없어질 때까지 while(progresses.length > 0){ // 현재까지의 구현 단계와 구현 속도를 더한다 for(let i = 0; i < progresses.length; i++){ progresses[i] += speeds[i]; } // 맨 앞 작업의 구현 단계가 100 이상이라면 if(progresses[0] >= 100){ // 맨 앞 작업 ~ 마지막 작업까지 구현 단계가 100 이상인 것들을 찾는다 for(let i = 0; i < progresses.length; i++){ // 100 이상이라면 doneList에 저장한다 if(progresses[i] >= 100){ doneList.push(progresses[i]); // 중간에 구현 단계가 100미만의 작업이 나온다면 break로 탈출한다 }else{ break; } } // result에 몇 개 작업이 완료-배포되었는지 저장하고, result.push(doneList.length); // doneList, progresses, speeds의 요소들을 앞에서부터 제거한다. while(doneList.length > 0){ progresses.shift(); speeds.shift(); doneList.shift(); } } } return result; }
테스트 케이스
[40, 93, 30, 55, 60, 65] [60, 1, 30, 5, 10, 7] [1, 2, 3]
[93, 30, 55, 60, 40, 65] [1, 30, 5, 10, 60, 7] [2, 4]
[93, 30, 55, 60] [1, 30, 5, 40] [2, 2]
[99, 99, 99, 99, 99] [3, 3, 3, 3, 3] [5]
[0, 0, 0, 0] [100, 50, 34, 25] [1, 1, 1, 1]
[5, 5, 5] [21, 25, 20] [3]
'알고리즘, 자료구조 > 프로그래머스' 카테고리의 다른 글
[Javascript] 프로그래머스 큰 수 만들기 (0) 2020.07.03 [Javascript] 프로그래머스 프린터 (0) 2020.06.30 [Javascript] 프로그래머스 카펫 (0) 2020.06.29 [Javascript] 프로그래머스 H-index (0) 2020.06.26 [Javascript] 프로그래머스 소수 찾기 (0) 2020.06.23