leetcode/DP

[DP ]1220. Count Vowels Permutation

DanGEE 2022. 8. 7. 16:30

해설 : 이전 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;
        
    }
};