๋ฐ์ํ
๋ฌธ์
2×n ์ง์ฌ๊ฐํ์ 1×2, 2×1๊ณผ 2×2 ํ์ผ๋ก ์ฑ์ฐ๋ ๋ฐฉ๋ฒ์ ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์๋ ๊ทธ๋ฆผ์ 2×17 ์ง์ฌ๊ฐํ์ ์ฑ์ด ํ๊ฐ์ง ์์ด๋ค.
## ์ ๋ ฅ
์ฒซ์งธ ์ค์ n์ด ์ฃผ์ด์ง๋ค. (1 ≤ n ≤ 1,000)
## ์ถ๋ ฅ
์ฒซ์งธ ์ค์ 2×n ํฌ๊ธฐ์ ์ง์ฌ๊ฐํ์ ์ฑ์ฐ๋ ๋ฐฉ๋ฒ์ ์๋ฅผ 10,007๋ก ๋๋ ๋๋จธ์ง๋ฅผ ์ถ๋ ฅํ๋ค.
์๊ฐ ์ ํ | ๋ฉ๋ชจ๋ฆฌ ์ ํ | ์ ์ถ | ์ ๋ต | ๋งํ ์ฌ๋ | ์ ๋ต ๋น์จ |
---|---|---|---|---|---|
1 ์ด | 256 MB | 68465 | 40719 | 32702 | 58.894% |
https://www.acmicpc.net/problem/11727
ํ์ด
์ฝ๋
import java.util.Scanner;
public class _2xnํ์ผ๋ง2 {
static int[] dp = new int[1001];
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
System.out.println(tiling(n));
sc.close();
}
public static int tiling(int n){
if(n == 1) return 1;
if(n == 2) return 3;
if(dp[n] == 0){
dp[n] = (tiling(n-1) + (tiling(n-2) * 2)) % 10007;
}
return dp[n];
}
}
๋ฐ์ํ