https://programmers.co.kr/learn/courses/30/lessons/12900?language=javascript
처음에는 재귀함수와 Map 을 사용해서 문제를 풀었는데... 효율성 테스트에서 런타임 에러가 나더라...
아무리 살펴봐도 코드에 에러날 부분은 없어 보여서 뭔 에런가 고민하다가 도저히 모르겠어서 질의응답을 보니 javascript 런타임 환경의 call stack 사이즈가 부족해서 런타임 에러가 나오는 것 같다고 하더라.
내 브라우저에서 테스트 해보니 맞는 얘기더라... ㅜㅜ
그래서 재귀함수 대신 stack 으로 바꿔서 풀었다.
어차피 (n 의 개수) = (n - 1 의 개수) + (n - 2 의 개수)
이기 때문에 stack 으로 풀어도 충분.
참고로 내 브라우저에서 stack 으로 돌렸을때는 solution(50000000)
까지는 버텼다.
모든 프로그래머스 문제 관련 코드들은 GitHub 링크 에 있음.
const countRectangle = (remainCount, map) => {
if (remainCount === 1) {
return 1;
} else if (remainCount === 2) {
return 2;
}
if (!map.has(remainCount)) {
const count = countRectangle(remainCount - 2, map) + countRectangle(remainCount - 1, map);
map.set(remainCount, count % 1000000007);
}
return map.get(remainCount);
}
function solution(n) {
// return countRectangle(n, new Map());
const stack = [1, 2];
for (let i = 2; i < n; i++) {
stack.push((stack[i - 2] + stack[i - 1]) % 1000000007);
}
return stack[n - 1];
}