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]을 출력했다.