본문 바로가기
코딩테스트/프로그래머스

코딩테스트 큐(queue) 문제 - 기능개발 풀이 과정 및 코드 리팩토링

by 코드스니펫 2024. 3. 15.
반응형

코딩테스트 큐(queue) 문제 - 기능개발 풀이 과정 및 코드 리팩토링

 

programmers logo

 

프로젝트의 성공적인 완성을 위해서는 각 기능의 개발 및 배포가 중요한 역할을 합니다. 특히 현대의 소프트웨어 개발 과정에서는 여러 기능이 동시에 개발되며, 이들의 개발 속도와 배포 순서가 프로젝트 진행에 큰 영향을 미칩니다.

 

"기능개발" 문제는 이러한 현실적 상황을 반영한 프로그래밍 문제로, 각 기능의 개발 진도와 속도를 고려하여 배포 순서와 각 배포마다 몇 개의 기능이 완성되는지를 예측해야 합니다. 이 글을 통해 문제를 해결하는 과정을 살펴보면, 효율적인 프로젝트 관리와 개발 스케줄링에 대한 인사이트를 얻을 수 있습니다.

 

 

코딩테스트 큐 문제 - 기능개발

 

▼ 문제 직접 확인해보세요! ▼

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

개발 중인 여러 기능의 진도와 개발 속도가 주어졌을 때, 각 배포마다 몇 개의 기능이 완성되어 서비스에 반영될 수 있는지 계산하는 것이 목표입니다. 문제의 핵심은 뒤에 있는 기능이 앞선 기능보다 먼저 개발될 수 있지만, 배포는 앞선 기능이 배포될 때 함께 이루어진다는 점입니다.

 

 

필자의 해결방법

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;
}

 

위 해결책은 직관적이고 문제를 효과적으로 해결하지만, 매일 마다 모든 기능의 진도를 업데이트하는 방식은 큰 데이터셋에서 비효율적일 수 있습니다. 개선된 방법으로는 각 기능이 완성되기까지 남은 일수를 계산하여 처리하는 방법이 있습니다.

 

이 방식은 각 기능이 완성되기까지 필요한 날짜를 먼저 계산하고, 첫 번째 기능이 배포되는 날에 함께 배포될 수 있는 기능의 수를 계산합니다. 이렇게 함으로써 매일 마다의 진도 계산을 생략하고, 전체적인 처리 속도를 향상시킬 수 있습니다.

 


 

끝으로

"기능개발" 문제 해결을 통해 우리는 프로젝트의 효율적인 관리와 개발 과정의 최적화에 대해 생각해볼 기회를 가졌습니다. 제시된 기본 해결책과 개선된 방법 모두 각각의 상황에 따라 유용할 수 있으며, 실제 프로젝트 관리에 있어서도 이러한 접근 방식들이 적용될 수 있습니다.

 

알고리즘 문제 해결 과정에서 얻은 지식이 실제 개발 현장에서도 유용하게 활용되길 바랍니다. 문제를 해결하는 과정에서의 창의적인 사고와 끊임없는 개선 노력이 여러분을 더 나은 개발자로 성장시킬 것입니다.

 

▼ 아래 문제도 풀어보세요! ▼

 

 

코딩테스트 해시(hash) 문제 - 폰켓몬 풀이 과정 및 리팩토링

코딩테스트 해시(hash) 문제 - 폰켓몬 해결 방법 및 리팩토링 알고리즘 문제 해결은 프로그래밍 역량을 키우는 데 있어 필수적인 과정입니다. 특히, 다양한 데이터를 효율적으로 관리하고 처리해

lemonlog.tistory.com

 

 

코딩테스트 해시(hash) 문제 - 완주하지 못한 선수 문제 원리 및 풀이

코딩테스트 해시(hash) 문제 - 완주하지 못한 선수 문제 원리 및 풀이 마라톤 경기는 참가자 모두에게 도전의 장입니다. 하지만, 모든 참가자가 완주하는 것은 아닙니다. 프로그래밍 문제로 치면,

lemonlog.tistory.com