코딩테스트 큐(queue) 문제 - 기능개발 풀이 과정 및 코드 리팩토링
프로젝트의 성공적인 완성을 위해서는 각 기능의 개발 및 배포가 중요한 역할을 합니다. 특히 현대의 소프트웨어 개발 과정에서는 여러 기능이 동시에 개발되며, 이들의 개발 속도와 배포 순서가 프로젝트 진행에 큰 영향을 미칩니다.
"기능개발" 문제는 이러한 현실적 상황을 반영한 프로그래밍 문제로, 각 기능의 개발 진도와 속도를 고려하여 배포 순서와 각 배포마다 몇 개의 기능이 완성되는지를 예측해야 합니다. 이 글을 통해 문제를 해결하는 과정을 살펴보면, 효율적인 프로젝트 관리와 개발 스케줄링에 대한 인사이트를 얻을 수 있습니다.
코딩테스트 큐 문제 - 기능개발
▼ 문제 직접 확인해보세요! ▼
개발 중인 여러 기능의 진도와 개발 속도가 주어졌을 때, 각 배포마다 몇 개의 기능이 완성되어 서비스에 반영될 수 있는지 계산하는 것이 목표입니다. 문제의 핵심은 뒤에 있는 기능이 앞선 기능보다 먼저 개발될 수 있지만, 배포는 앞선 기능이 배포될 때 함께 이루어진다는 점입니다.
필자의 해결방법
function solution(progresses, speeds) {
let answer = [];
while(progresses.length!==0){
progresses.forEach((x,i) => {
progresses[i] = x+speeds[i];
});
let count = 0;
if(progresses[0]>=100){
let index = 0;
for(x of progresses){
if(x>=100) {
count++;
if(progresses.length===index+1) answer.push(count);
}else{
answer.push(count);
break;
}
index ++;
}
progresses.splice(0,count);
speeds.splice(0,count);
}
}
return answer;
}
이 코드는 매일 마다 각 기능의 진도를 업데이트하고, 가장 앞에 있는 기능이 배포 가능한 상태(100% 이상)에 도달했는지 확인합니다. 배포 가능한 상태에 도달한 경우, 그 이후의 기능들 중 배포 가능한 기능들을 함께 배포합니다. 이 과정을 progresses 배열이 빈 배열이 될 때까지 반복합니다.
더 개선할 수 있는 풀이 방법
function solution(progresses, speeds) {
let answer = [];
let days = progresses.map((progress, index) => Math.ceil((100 - progress) / speeds[index]));
while(days.length > 0) {
let count = 1;
let day = days.shift();
speeds.shift();
while(days[0] <= day) {
days.shift();
speeds.shift();
count++;
}
answer.push(count);
}
return answer;
}
위 해결책은 직관적이고 문제를 효과적으로 해결하지만, 매일 마다 모든 기능의 진도를 업데이트하는 방식은 큰 데이터셋에서 비효율적일 수 있습니다. 개선된 방법으로는 각 기능이 완성되기까지 남은 일수를 계산하여 처리하는 방법이 있습니다.
이 방식은 각 기능이 완성되기까지 필요한 날짜를 먼저 계산하고, 첫 번째 기능이 배포되는 날에 함께 배포될 수 있는 기능의 수를 계산합니다. 이렇게 함으로써 매일 마다의 진도 계산을 생략하고, 전체적인 처리 속도를 향상시킬 수 있습니다.
끝으로
"기능개발" 문제 해결을 통해 우리는 프로젝트의 효율적인 관리와 개발 과정의 최적화에 대해 생각해볼 기회를 가졌습니다. 제시된 기본 해결책과 개선된 방법 모두 각각의 상황에 따라 유용할 수 있으며, 실제 프로젝트 관리에 있어서도 이러한 접근 방식들이 적용될 수 있습니다.
알고리즘 문제 해결 과정에서 얻은 지식이 실제 개발 현장에서도 유용하게 활용되길 바랍니다. 문제를 해결하는 과정에서의 창의적인 사고와 끊임없는 개선 노력이 여러분을 더 나은 개발자로 성장시킬 것입니다.
▼ 아래 문제도 풀어보세요! ▼
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
코딩테스트 정렬 문제 가장 큰 수 만들기, 문제 해결과 코드 리팩토링 (0) | 2024.03.23 |
---|---|
코딩테스트 최소 힙(MinHeap)을 활용한 "더 맵게" 문제 해결법 (0) | 2024.03.19 |
코딩테스트 스택(stack) 문제 - 같은 숫자는 싫어 해결 과정 (0) | 2024.03.14 |
코딩테스트 해시(hash) 문제 - 완주하지 못한 선수 문제 원리 및 풀이 (0) | 2024.03.11 |
코딩테스트 해시(hash) 문제 - 폰켓몬 풀이 과정 및 리팩토링 (0) | 2024.03.10 |