문제



풀이
은찬
function solution(n) { const dp = Array.from({length: n}, () => 0); if(n % 2){ return 0; } dp[0] = 1; dp[2] = 3; dp[4] = 11; for(let i = 4; i <= n; i++){ dp[i] = ((dp[i - 2] * 4 % 1000000007 - dp[i - 4] % 1000000007) + 1000000007) % 1000000007; } return dp[n]; }
재영
function solution(n) { if (n % 2) return 0; // 짝수개일경우에는 -> 2가 나머지가 없을 경우가 없음 -> 0 const arr = new Array(5000).fill(0); // 이전 값을 저장하는 배열 arr[0] = 1; // 1가지 let newPatternCases = 0; // 새로운 케이스들을 계산하기 위한 변수 for (let i = 2; i < n + 1; i += 2) { if (i >= 4) newPatternCases += 2 * arr[i - 4]; // 오른쪽에 뭔가가 추가될 건데... 항상 새로운 패턴을 따져봐야 해요. arr[i] = (3 * arr[i - 2] + newPatternCases) % 1000000007; } return arr[n]; }