728x90
https://www.acmicpc.net/problem/11727
문제
2×n 직사각형을 1×2, 2×1과 2×2 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오.
아래 그림은 2×17 직사각형을 채운 한가지 예이다.
입력
더보기
첫째 줄에 n이 주어진다. (1 ≤ n ≤ 1,000)
출력
더보기
첫째 줄에 2×n 크기의 직사각형을 채우는 방법의 수를 10,007로 나눈 나머지를 출력한다.
풀이방법
위와 같은 방식으로 일반식을 도출해낼 수 있다.
초기 값은 이러하다. $f(1) = 1 $, $f(2) = 3$
$f(3)$ 부터는 빨간색과 회색을 통해서 일반식을 구할 수 있다.
$f(n) = f(n-1) + 2f(n-2)$ 와 같은 일반식으로 도출할 수 있다.
마지막으로 구한 값에 10007로 나누어 값을 할당한다.
코드
import sys
input = sys.stdin.readline
dp = [0 for _ in range(1001)]
dp[1] = 1
dp[2] = 3
N = int(input())
for i in range(3, N+1):
dp[i] = (dp[i-1] +2 * dp[i-2]) % 10007
print(dp[N])
'Algorithm > BOJ' 카테고리의 다른 글
[BOJ] [Python] 6593번 : 상범 빌딩 (0) | 2023.11.16 |
---|---|
[BOJ] [Python] 11945번: 뜨거운 붕어빵 (1) | 2023.11.15 |
[BOJ] [Python] 14916번: 거스름돈 (1) | 2023.11.14 |
[BOJ] [Python] 17202번: 핸드폰 번호 궁합 (0) | 2023.11.08 |
[BOJ] [Python] 3187번 : 양치기 꿍 (0) | 2023.08.27 |