f(n) = f(n-2) * 3 + ( f(n - 4) * 2 + ... + f(0) * 2) )
class Solution {
public int solution(int n) {
return threeTilingDP(n);
}
public int threeTilingDP(int n) {
// 홀수의 경우에는 경우의 수가 0이 나온다.
if (n % 2 == 1) return 0;
long[] tile = new long[n + 1];
tile[0] = 1;
tile[2] = 3;
for (int i = 4; i <= n; i += 2) {
tile[i] = tile[i-2] * 3;
for(int j=i-4; j>=0; j-=2){
tile[i] += tile[j] * 2;
}
tile[i] = tile[i] % 1000000007;
}
return (int)tile[n];
}
}