알고리즘

프로그래머스 JS | 2 x n 타일링 ( feat.시간초과 )

3jun 2023. 4. 29. 19:46

위 문제는 피보나치 수열을 사용하면  쉽게 해결할 수 있다.

구글링 해보면 풀이방법과 해답 코드를 쉽게 찾을 수 있으니 문제 풀이는 넘어가려고 한다.

❌  Solution ( 85 / 100 ) 정확성 70, 효율성 15

function solution(n) {
    let answer = 0;
    const dp = Array(n-1).fill(0)
    dp[0] = 1
    dp[1] = 2
    for(var i = 2; i < n; i++){
        dp[i] = (dp[i-1] + dp[i-2]) % 1000000007
    }
    return dp[n-1];
}

피보나치 수열을 구현하기 위해 위처럼 코드를 작성했는데, 효율성 테스트를 통과하지 못했다.

구글링을 해보면 상위에 노출되는 여러 코드 역시 마찬가지였다. 

✅ Solution ( 100 / 100 )

function solution(n) {
    let answer = 0;
    const dp = Array(n).fill(0)
    dp[1] = 1
    dp[2] = 2
    for(var i = 3; i <= n; i++){
        dp[i] = (dp[i-1] + dp[i-2]) % 1000000007
    }
    return dp[n];
}

윗 코드를 이렇게 수정해주면 효율성 테스트를 통과한다.

근데 아무리 봐도 도통 이유를 모르겠다..

 

혹시 이유를 아시는 분은 관련 포스팅이나 아이디어 댓글로 남겨주시면 감사드립니다..

첫번째 코드도
let answer = 0 
코드만 삭제하면 효율성 테스트 통과된다.