ALGORITHM/BOJ
[백준] 11726 2xn 타일링
0298
2020. 11. 9. 21:48
11726번: 2×n 타일링
2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다.
www.acmicpc.net
2020-11-09
1. Top-down
import java.util.Scanner;
public class Main11726_1 {
public static int N, dp[];
public static int solve(int x) {
if(x == 1) return 1;
if(x == 2) return 2;
if(dp[x] > 0) return dp[x];
dp[x] = (solve(x-1) + solve(x-2))%10007;
return dp[x];
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
N = sc.nextInt();
dp = new int[N+1];
System.out.println(solve(N));
}
}
2. Bottom-up
import java.util.Scanner;
public class Main11726 {
public static int N, dp[];
public static int solve() {
dp = new int[1001];
dp[1] = 1;
dp[2] = 2;
for(int i = 3; i <= N; i++) {
dp[i] = (dp[i-1] + dp[i-2])%10007;
}
return dp[N];
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
N = sc.nextInt();
System.out.println(solve());
}
}
top-down, bottom-up 두 가지 방법으로 풀어봤다.
N = 1 : 1개
N = 2 : 2개
N = 3 : 3개
N = 4 : 5개
N = 5 : 8개
.
.
.
N = 9 : 55개
의 규칙을 따라가면, dp[N] = dp[N-1] + dp[N-2] 라는 점화식을 도출할 수 있다.