문제
2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다.
예제 입력 & 출력
소스코드
"2xn 타일링" 문제는 다이나믹 프로그래밍(DP, 동적계획법)을 활용해서 풀 수 있는 문제입니다. 사용할 수 있는 타일은 1x2, 2x1 두 가지 타일 타입이 존재합니다. 아래는 n이 4일 경우에 대한 예시입니다. n이 1일 경우 2x1 타일 하나만 사용이 가능하기 때문에 1, n이 2일 경우 1x2 타일 2개, 2x1 타일 2개를 사용해서 총 2개의 경우의 수를 낼 수 있습니다.
2x3부터 패턴을 잘 살펴보시면 되는데 아래 그림의 오른쪽 색상으로 표시한 직사각형을 살펴보면 우측에 2x1 타일이 들어갈 경우와 2x1 타일 2개가 들어간 패턴을 확인할 수 있습니다. 2x1 타일을 우측에 배치했을 경우 n-1의 결과값과 같고, 1x2 타일을 우측에 배치했을 경우 n-2 결과값과 같은 점을 캐치했다면 DP로 구현할 수 있음을 알 수 있습니다.
memo[i] = memo[i - 1] + memo[i - 2]
const fs = require('fs');
let count = Number(fs.readFileSync('./dev/stdin').toString());
const memo = {
1: 1,
2: 2
}
for (let i = 3; i <= count; i++) {
memo[i] = (memo[i - 1] + memo[i - 2]) % 10007;
}
console.log(memo[count]);
'Computer science > 알고리즘' 카테고리의 다른 글
[백준, node.js] 11047번 "동전 0" 문제 해결방법 (0) | 2022.01.23 |
---|---|
[백준, node.js] 2193번 "이친수" 문제 해결방법 (0) | 2022.01.20 |
[백준, node.js] 1463번 "1로 만들기" 문제 해결방법 (0) | 2022.01.15 |
[백준, node.js] 10818번 최소, 최대 문제 해결방법 (0) | 2022.01.12 |
[백준: 9093번] 단어 뒤집기 문제 | 자바스크립트(Javascript(JS), Node) (0) | 2021.10.26 |
이 포스팅은 쿠팡파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.