해설 : 이전 dp 문제들과 같이 현재 단계에서의 만들수 있는 경우의 수는
이전 단계의 a,e,i,o,u를 사용해서 만들 수 있는 경우의 합과 같다.
따라서 dp[0][0] (=a) , dp[0][1] (=e) 은 미리 구해놓고,
dp[1][0] 에서는 조건들에 따라 수를 합해 나가면된다.
class Solution {
public:
int countVowelPermutation(int n) {
long long modulo = 1000000007;
vector<vector<long long>> dp(n, vector<long long> (5, 0));
for(int i=0; i<5; ++i){
dp[0][i]=1;
}
for(int j =1; j<n; j++){
dp[j][0] += (dp[j-1][1]) %modulo;
dp[j][1] += (dp[j-1][0] + dp[j-1][2])%modulo;
dp[j][2] += (dp[j-1][0] + dp[j-1][1] + dp[j-1][3] + dp[j-1][4])%modulo;
dp[j][3] += (dp[j-1][2] + dp[j-1][4])%modulo;
dp[j][4] += (dp[j-1][0])%modulo;
}
long long sum = 0;
for(int i=0; i<5; ++i){
sum += dp[n-1][i];
}
return sum%modulo;
}
};
'leetcode > DP' 카테고리의 다른 글
72. Edit Distance (classic. DP problem) (0) | 2023.02.27 |
---|---|
823. Binary Trees With Factors (python) (0) | 2022.08.09 |
[dp]300. Longest Increasing Subsequence [python] (0) | 2022.08.08 |
[DP] 377. Combination Sum IV (0) | 2022.08.07 |