https://www.acmicpc.net/problem/2133
2133번: 타일 채우기
문제 3×N 크기의 벽을 2×1, 1×2 크기의 타일로 채우는 경우의 수를 구해보자. 입력 첫째 줄에 N(1 ≤ N ≤ 30)이 주어진다. 출력 첫째 줄에 경우의 수를 출력한다. 예제 입력 1 복사 2 예제 출력 1 복사 3 힌트 아래 그림은 3×12 벽을 타일로 채운 예시이다....
www.acmicpc.net
문제
3×N 크기의 벽을 2×1, 1×2 크기의 타일로 채우는 경우의 수를 구해보자.
입력
첫째 줄에 N(1 ≤ N ≤ 30)이 주어진다.
출력
첫째 줄에 경우의 수를 출력한다.
3x1 크기의 벽을 채우는 방법은 존재하지 않는다.
3x2 크기의 벽을 채우는 방법은 총 3가지가 있다.
3x3 크기의 벽을 채우는 방법은 존재하지 않는다.
3x4 크기의 벽을 채우는 방법은 총 11가지가 있다. (3x3+2)
3x5 크기의 벽을 채우는 방법은 존재하지 않는다.
3x6 크기의 벽을 채우는 방법은 총 41가지가 있다. (11x3+3*2+2)
이때 주의할 점은 n이 2씩 증가할 때마다 새로운 경우의 수가 2개씩 추가된다.
for(int i=4; i<=n; i++)
if(i%2==0){
dp[i]=dp[i-2]*3;
for(int j=4; i-j>=0; j+=2)
dp[i]+=dp[i-j]*2;
}
코드
#include <stdio.h>
int main(){
int n;
scanf("%d",&n);
int dp[31]={ 1, 0, };
dp[2]=3;
for(int i=4; i<=n; i++)
if(i%2==0){
dp[i]=dp[i-2]*3;
for(int j=4; i-j>=0; j+=2)
dp[i]+=dp[i-j]*2;
}
printf("%d\n", dp[n]);
}
'알고리즘 > 백준' 카테고리의 다른 글
백준 2225번: 합분해 (0) | 2020.01.18 |
---|---|
백준 9461번: 파도반 수열 (0) | 2020.01.17 |
백준 1699번: 제곱수의 합 (0) | 2020.01.17 |
백준 2579번: 계단 오르기 (0) | 2020.01.17 |
백준 1912번: 연속합 (0) | 2020.01.17 |