본문 바로가기

leetcode/DP

[DP ]1220. Count Vowels Permutation

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