728x90
Problem
https://school.programmers.co.kr/learn/courses/30/lessons/42586
여러 기능개발 작업들이 동시에 수행중이며 뒤의 작업은 앞의 작업보다 먼저 완료될 수 있다. 하지만 완료된 기능개발 작업들을 배포하는 순서는 앞의 작업 순서에 의존적이다. 즉, 앞이 먼저 배포가 되거나 배포가 될 때 뒤의 작업들도 배포가 될 수 있게 된다. 앞이 먼저 나가야 뒤도 나갈 수 있는 Queue 형태의 데이터 구조다.
Approach
tasks가 일종의 queue 구조가 된다. tasks가 아직 남아있음을 조건으로 while문을 돌린다. tasks의 가장 첫 작업이 끝났는지 여부를 확인한 뒤, 끝났다면 해당 작업을 tasks, speeds 배열에 빼준다. 이때 뒤에 작업들도 끝났을 경우도 고려해야 하는데, 몇개가 끝날지 예상할 수 없다는 문제가 있다. 이를 해결하려면 while문으로 100% 완성된 조건에 맞는 작업이 계속 나타날때 까지 계속 처리를 해주도록 했다.
처리를 다 하면 count에 처리한 작업의 수가 쌓이게 된다. 0 초과할 경우(처리한 작업이 1개 이상일 경우) result 배열에 처리한 작업의 수를 기록해준다.
그 다음은 아직 마무리하지 못한 작업들에 while문으로 진도를 추가해주는 작업을 해준다.
위 작업들을 반복하면 결국 tasks에는 빈 배열이 남게되고 함수는 최종 처리 기록 정보만 남아있는 result 배열을 반환한다.
Solution
function solution(progresses, speeds) {
const tasks = [...progresses]
const wip = [...speeds]
const result = [];
while(tasks.length !== 0) {
console.log(tasks)
let count = 0;
// 1) 작업 완료된 경우(100 이상), count에 완료 기능 수를 저장
while(tasks[0] >= 100) {
tasks.shift();
speeds.shift();
count++;
}
// 동시에 완료 기능 수를 result에 입력
if(count) result.push(count);
// 2) 작업이 아직 미완인 경우
tasks.forEach((el, idx) => {
tasks[idx] = el + speeds[idx];
})
}
return result;
}
const progressesInput = [93, 30, 55];
const speedsInput = [1, 30, 5];
console.log(solution(progressesInput, speedsInput));
728x90
'Research > Coding Test' 카테고리의 다른 글
leetcode_66. plus-one (0) | 2023.03.24 |
---|---|
747. Largest Number At Least Twice of Others (0) | 2023.03.23 |
스택/큐_같은 숫자는 싫어 (0) | 2023.03.21 |
20. Valid Parentheses (0) | 2023.03.21 |
13. Roman to Integer (0) | 2023.03.20 |
댓글