ps

기능개발

반환값:  배포날짜에 따른 기능의 수 => 빠른날짜 순서대로 배열로 반환

 

조건 :

1. 기능들의 배포순서는 인덱스 순서이며, 진도율과 개발속도 배열이 주어짐

2. 진도율이 100이 되면 배포할 수 있다. (공식 : 현재 진도율 + 개발속도 * X(배포날짜) = 100)

3. 배포 순서가 뒤에 있는 기능은 배포날짜가 빠르다고 하더라도 앞의 기능과 함께 배포된다.

 

문제 풀이 과정:

1. 각 기능들의 배포날짜(기간)을 구한다.

2. 배포날짜 배열에서

-- 앞의 기능보다 배포날짜가 빠르거나 같은 것은 모두 앞의 기능 배포날짜로 바꾼다.

--앞의 기능이 뒤의 기능보다 빨리 배포될 수 있는 경우 앞의 기능 배포날짜에 배포한다.

풀이에 맞게 각각의 단계에서 하나의 함수를 만든다. 

 

먼저 3개의 함수를 만든 경우.

function solution(progresses, speeds) {
	let numFunc = []
    let distributeDays = []
    
    function calculateDays(){
        for(let i = 0; i < progresses.length; i++){
            distributeDays[i] = Math.ceil(((100 - progresses[i]) / speeds[i]))
        }
    }
    
    function calculateDdays(){
        for(let j = 0; j < distributeDays.length; j++){
            if(distributeDays[j] > distributeDays[j+1]){
                distributeDays[j+1] = distributeDays[j];
            }
        }
    }
    
    function caculateNumfunc(){
        let num = 1;
        for(let k = 0; k < distributeDays.length; k++){
            if(distributeDays[k] == distributeDays[k+1]){
                num = num + 1;
            }else{
                numFunc.push(num);
                num = 1;
            }
        }
    }
    calculateDays();
    calculateDdays();
    caculateNumfunc();
    
    return numFunc;
 }

 

 하지만 calculateDdays()와 calculateNumfunc()는 같은 길이와 유사한 구조의 for문으로 구성되어 있기 때문에 이를 합쳐서 쓸 수 있다. 또한 map 함수에서 index를 제공하기 때문에(api를 확인하는 버릇을 들이자!) 굳이 for문을 만들 필요 없이 코드를 간결하게 할 수 있다.

완성된 코드는 아래와 같다.

function solution(progresses, speeds) {
    let numFunc = []
    
    let caldays = (value, index) => Math.ceil(((100 - value) / speeds[index]))
    let days = progresses.map(caldays)
    
    let num = 1;
    for(let i=0; i < days.length; i++){
        if(days[i] >= days[i+1]){
            days[i+1] = days[i]
            num = num + 1;
        }else{
            numFunc.push(num);
            num = 1;
        }
    }
    
    return numFunc;
}

'ps' 카테고리의 다른 글

[완전 탐색] 소수 찾기  (0) 2020.11.18
[완전탐색] 모의고사  (0) 2020.11.18
[정렬] 가장 큰 수, H-Index  (0) 2020.11.17
[우선순위큐] 디스크 컨트롤러  (0) 2020.10.27
완주하지 못한 선수  (0) 2020.10.16