[백준]11726-2xn타일링(node.js)

지리·2023년 5월 5일
0

알고리즘

목록 보기
18/27

문제

2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 n이 주어진다. (1 ≤ n ≤ 1,000)

출력

첫째 줄에 2×n 크기의 직사각형을 채우는 방법의 수를 10,007로 나눈 나머지를 출력한다.

풀이

위의 그림을 보면 n값에 1이 더해질때 경우의 수는 마지막의 타일이 세로로 놓일경우와(n-1) 가로로 놓일경우(n-2) 두가지를 더한 값이다.
세로로 들어갈 경우 전체 가로 길이는 n-1dp[n-1]의 값과 같고,
가로로 들어갈 경우 전체 가로 길이는 n-2dp[n-2]의 값과 같아진다.

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

코드

var fs = require('fs');
let n = +fs.readFileSync('./input.txt').toString().trim();

const dp = Array(n + 1).fill(0);
dp[1] = 1;
dp[2] = 2;

function solution() {
	for (let i = 3; i < dp.length; i++) {
		dp[i] = (dp[i - 1] + dp[i - 2]) % 10007;
      //마지막 값에 10007을 나눠주면 너무 큰 값을 계산하게 되면서 오류가 나게 되서 미리 1007을 나눈다.
	}
	console.log(dp[n]);
}

solution();
profile
공부한것들, 경험한 것들을 기록하려 노력합니다✨

0개의 댓글

관련 채용 정보