프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 각 기능의 개발 속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있지만, 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다.
주어진 progresses
배열과 speeds
배열을 사용하여 각 배포마다 몇 개의 기능이 배포되는지를 구하는 함수를 완성해야 합니다.
[93, 30, 55]
, [1, 30, 5]
[2, 1]
첫 번째 기능은 93% 완료되어 있고 하루에 1%씩 작업이 가능하므로 7일간 작업 후 배포가 가능합니다.
두 번째 기능은 30%가 완료되어 있고 하루에 30%씩 작업이 가능하므로 3일간 작업 후 배포가 가능합니다. 하지만 첫 번째 기능이 배포되는 7일째 함께 배포됩니다.
세 번째 기능은 55%가 완료되어 있고 하루에 5%씩 작업이 가능하므로 9일간 작업 후 배포가 가능합니다.
따라서 7일째에 2개의 기능, 9일째에 1개의 기능이 배포됩니다.
각 기능의 완료 일수를 계산하고, 이를 기반으로 배포 시점을 결정합니다. 첫 번째 기능의 완료 일수를 maxDay
로 설정하고, 현재 기능이 maxDay
보다 작거나 같으면 같은 날 배포할 수 있으므로 count
를 증가시킵니다. 그렇지 않으면 새로운 배포 시점이 되므로 현재 count
를 answer
배열에 추가하고, count
를 다시 1로 설정한 후, maxDay
를 현재 기능의 완료 일수로 업데이트합니다.
function solution(progresses, speeds) {
var answer = [];
var days = progresses.map((progress, index) => {
return Math.ceil((100 - progress) / speeds[index]);
});
var maxDay = days[0];
var count = 1;
for (var i = 1; i < days.length; i++) {
if (days[i] <= maxDay) {
count++;
} else {
answer.push(count);
count = 1;
maxDay = days[i];
}
}
answer.push(count);
return answer;
}
progresses
와 speeds
배열을 순회하며 각 기능이 완료되기까지 남은 일수를 계산하여 days
배열에 저장합니다.days
배열을 순회하며 첫 번째 기능의 완료 일수를 maxDay
로 설정하고, 이후 기능들의 완료 일수를 비교하여 같은 날 배포할 수 있는 기능의 수를 count
로 계산합니다.maxDay
보다 큰 일수가 나타나면 현재까지 계산된 count
를 answer
배열에 추가하고, 새로운 배포 시점을 위해 count
와 maxDay
를 업데이트합니다.answer
배열을 반환합니다.console.log(solution([93, 30, 55], [1, 30, 5])); // [2, 1]
console.log(solution([95, 90, 99, 99, 80, 99], [1, 1, 1, 1, 1, 1])); // [1, 3, 2]
이 코드는 주어진 예시 입력에 대해 올바른 결과를 출력합니다. 각 기능이 배포되는 시점을 정확히 계산하여 결과를 반환합니다.
이번 포스팅에서는 프로그래머스의 "기능 개발" 문제를 해결하는 방법을 살펴보았습니다. 각 기능의 완료 일수를 계산하고 이를 기반으로 배포 시점을 결정하여 문제를 효과적으로 해결할 수 있습니다. 코딩 테스트를 준비하는 여러분께 도움이 되길 바랍니다. 다음 포스팅에서는 또 다른 문제로 찾아뵙겠습니다. 감사합니다!