790 - Domino and Tromino Tiling
info
- 문제 보기: 790 - Domino and Tromino Tiling
- 소요 시간: 💥1시간 4분
- 풀이 언어:
java - 체감 난이도: 3️⃣
- 리뷰 횟수: ✅
풀이 키워드
스포주의
DP 수학
풀이 코드
info
- 메모리: 41100 KB
- 시간: 1 ms
class Solution {
int n;
final long mod = 1_000_000_007;
int memo[][] = new int[2][1000];
public int dp(int i, boolean gap) {
if (i == n) return gap ? 0 : 1;
if (i > n) return 0;
if (memo[gap?1:0][i] != -1) return memo[gap?1:0][i];
long res = 0L;
if (gap) {
res += dp(i+1, false); // ㄱ
res += dp(i+1, true); // ㅡ
}
else {
res += dp(i+1, false); // ㅣ
res += dp(i+2, false); // =
res += 2L * dp(i+2, true); // ㄴ
}
res %= mod;
return memo[gap?1:0][i] = (int)res;
}
public int numTilings(int n) {
this.n = n;
Arrays.fill(memo[0], -1);
Arrays.fill(memo[1], -1);
return dp(0, false);
}
}