Level2 - 2 x n 타일링

손대중·2022년 6월 29일
0

문제 설명 및 링크

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];
}

0개의 댓글