728x90
문제 설명
먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses와
각 작업의 개발 속도가 적힌 정수 배열 speeds가 주어질 때 각 배포마다
몇 개의 기능이 배포되는지를 return 하도록 solution 함수를 완성하세요.
제한 사항
- 작업의 개수(progresses, speeds배열의 길이)는 100개 이하입니다.
- 작업 진도는 100 미만의 자연수입니다.
- 작업 속도는 100 이하의 자연수입니다.
- 배포는 하루에 한 번만 할 수 있으며, 하루의 끝에 이루어진다고 가정합니다.
예를 들어 진도율이 95%인 작업의 개발 속도가 하루에 4%라면 배포는 2일 뒤에 이루어집니다.
문제 풀이 방법
- 100퍼가 되는 일수를 남은 퍼센트를 진행 속도로 나누어 Math.ceil()을 통해 구해준다.
- 일수를 구해 map()으로 배열화 시켜줬다면 이제 앞의 task가 완료되어 다음 task로 넘어가는 로직을 짜면된다.
또한, 해당 일에 몇개의 task가 완료됬는지도 알려줘야한다. - 여기선 앞의 task가 완료되기 까지 남은 일수와 현재 인덱스의 일수를 비교해서 반환할 배열에 값을 더해주고,
앞의 task가 완료되지 않았다면 계속 값을 더해준다.
다음으로 넘어갈 수 있다면 같은 로직을 다시 사용해 준다.
주의 사항
- 남은 날을 비교하여 값을 더하는 로직을 짤 때 주의하며 코드를 작성하자.
- 남은 날을 계산할 때 다른 방법도 있지만 위와 같이 해주는 것이 가독성이 좋다고 생각됨.
참고 문헌
- Math.ceil() : https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Math/ceil
- 전체적인 도움을 많이 받은 블로그
코드
function solution(progresses, speeds) {
let answer = [0];
const days = progresses.map((progress, index) => Math.ceil((100 - progress) / speeds[index]));
let max = days[0];
let count = 0
for(let i = 0; i<days.length; i++){
if(days[i] <= max){
answer[count] += 1;
}
else{
max = days[i];
answer[++count] = 1;
}
}
return answer;
}
728x90
'코딩 테스트 > 프로그래머스 코딩 테스트 연습' 카테고리의 다른 글
스택큐 / 2 / 다리를 지나는 트럭 (JS) (0) | 2022.06.12 |
---|---|
스택큐 / 2 / 프린터 (JS) (0) | 2022.06.11 |
완전탐색 / 2 / 카펫 (JS) (0) | 2022.06.10 |
완전탐색 / 2 / 소수찾기 (JS) (0) | 2022.06.09 |
완전탐색 / 1 / 모의고사 (JS) (0) | 2022.06.09 |