[코딩테스트]프로그래머스 - 2xn 타일링

Adela·2020년 7월 11일
0

프로그래머스

목록 보기
29/30
post-thumbnail

2xn 타일링

문제 설명

가로 길이가 2이고 세로의 길이가 1인 직사각형모양의 타일이 있습니다. 이 직사각형 타일을 이용하여 세로의 길이가 2이고 가로의 길이가 n인 바닥을 가득 채우려고 합니다. 타일을 채울 때는 다음과 같이 2가지 방법이 있습니다.

  • 타일을 가로로 배치 하는 경우
  • 타일을 세로로 배치 하는 경우
    예를들어서 n이 7인 직사각형은 다음과 같이 채울 수 있습니다.

    직사각형의 가로의 길이 n이 매개변수로 주어질 때, 이 직사각형을 채우는 방법의 수를 return 하는 solution 함수를 완성해주세요.

제한사항

  • 가로의 길이 n은 60,000이하의 자연수 입니다.
  • 경우의 수가 많아 질 수 있으므로, 경우의 수를 1,000,000,007으로 나눈 나머지를 return해주세요.

입출력 예

n	result
4	5

입출력 예 설명

입출력 예 #1

다음과 같이 5가지 방법이 있다.

해결한 코드

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

알고리즘

※ 피보나치를 사용한다.

1. 초기값을 설정한다.

  • n값이 1일때는 1개만 가능하다.
  • n값이 2일때는 2개 가능하다.

2. 점화식을 구한다.

n이 3 이상일 때 가능한 타일 배치는
( d[n] : 가로의 길이가 n일 때 배치 가능한 타일의 수 )
d[3] = d[2] + d[1]로 표현할 수 있다.
따라서 점화식은

d[n] = d[n-1] + d[n-2]

로 표현할 수 있다.

이렇게 구한 d[n]을 출력한다.
참고로 나는 n값이 1일 때 해당하는 값을 d[0]에 넣어주었기 때문에 d[n-1]을 출력했다.

profile
개발 공부하는 심리학도

0개의 댓글