알고리즘/백준

[백준] 11727번: 2×n 타일링 2 (JavaScript, NodeJS)

정현수 2022. 2. 6. 17:36
반응형

문제

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

아래 그림은 2×17 직사각형을 채운 한가지 예이다.

입력

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

출력

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

예제 입력 1 복사

2

예제 출력 1 복사

3

예제 입력 2 복사

8

예제 출력 2 복사

171

예제 입력 3 복사

12

예제 출력 3 복사

2731

정답 풀이

const path = process.platform === "linux" ? "/dev/stdin" : "input.txt"; // 리눅스로 테스트할 땐 따로 설정해주어야 합니다.
const [n] = require("fs")
  .readFileSync(path)
  .toString()
  .trim()
  .split("\n")
  .map(Number);

function solution(n) {
  const memo = [...Array(1000)];

  memo[0] = 1;
  memo[1] = 1;

  for (let i = 2; i < n + 1; i += 1) {
    memo[i] = (memo[i - 1] + memo[i - 2] * 2) % 10007;
  }

  console.log(memo[n]);
}

solution(n);
⭐ 문제 핵심 아이디어 ⭐
1. DP

 

https://junghyeonsu.tistory.com/284

 

[백준] 11726번: 2×n 타일링 (JavaScript, NodeJS)

문제 2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다. 입력 첫째 줄에 n이 주어진다.

junghyeonsu.tistory.com

 

위의 문제와 거의 동일하다.

규칙을 찾아보면

2 x 1 두 개를 합치면 2 x 2 타일이고

1 x 2 두 개를 합치면 역시 2 x 2가 들어갈 수 있다.

그거를 생각해서 점화식을 세우면 된다.

반응형