기능개발

Posted by Casval's Storage on October 29, 2020

기능개발

간만에 다시 푼 알고리즘.

문제를 이해하는 시간도 점점 오래 걸리는 것이 너무 코딩을 놓았네;;

통과한 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function solution(progresses, speeds) {
    var answer = [];
    const days = [];
    progresses.forEach((p, i) => {
        days[i] = Math.ceil((100 - p)/speeds[i]); 
    });
    
    let max = days[0];
    let cnt = 1;
    for(let i = 1; i < days.length; i++) {
        if (days[i] > max) {
            answer.push(cnt);
            max = days[i];
            cnt = 1;
        } else {
            cnt++;
        }
    }
    answer.push(cnt);
    return answer;
}

먼저 각각의 기능이 개발 되는데 필요한 날짜를 계산하여 넣고 이전 날짜보다 작은 날짜들을 모두 계산하는 방식으로 처리. 나누기가 있는 경우 날짜가 소숫점이 나오므로 반올림을 해야 하는데 이런건 생각을 못하고 컨닝 함.

통과하지 못한 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function solution(progresses, speeds) {
    var answer = [];
    while(progresses.length > 0) {
        let index = -1;
        let blocked = false;
        progresses.forEach((p, i) => {
            progresses[i] = p + speeds[i];
            if (!blocked) {
                if (progresses[i] >= 100) {
                    index = i;
                } else {
                    blocked = true;
                }
            }
        });

        if (index >= 0) {
            answer.push(index + 1);
            progresses.splice(0, index + 1);
        }
    }
    return answer;
}

개발 진행 상황에 개발 진행 속도를 더한 후 100이 넘는 것들을 앞에서부터 연속으로 세서 답을 넣고 해당 기능은 progresses에서 삭제. 속도도 안나오고 코드상에 오류도 있어 통과되지 못함.

회고

  • 최대한 루프를 돌리지 않는 방법에 대해 고민해야 함.
  • 패턴을 외우는 것도 좋은 방법 같다. -> 비슷한 문제를 자주 풀어야 외워짐.