LeetCode 솔루션					분류
				
						1155. Number of Dice Rolls With Target Sum
본문
[Medium]
You have n dice and each die has k faces numbered from 1 to k.
Given three integers n, k, and target, return the number of possible ways (out of the kn total ways) to roll the dice so the sum of the face-up numbers equals target. Since the answer may be too large, return it modulo 109 + 7.
You have n dice and each die has k faces numbered from 1 to k.
Given three integers n, k, and target, return the number of possible ways (out of the kn total ways) to roll the dice so the sum of the face-up numbers equals target. Since the answer may be too large, return it modulo 109 + 7.
Example 1:
Input: n = 1, k = 6, target = 3 Output: 1 Explanation: You throw one die with 6 faces. There is only one way to get a sum of 3.
Example 2:
Input: n = 2, k = 6, target = 7 Output: 6 Explanation: You throw two dice, each with 6 faces. There are 6 ways to get a sum of 7: 1+6, 2+5, 3+4, 4+3, 5+2, 6+1.
Example 3:
Input: n = 30, k = 30, target = 500 Output: 222616187 Explanation: The answer must be returned modulo 109 + 7.
Constraints:
- 1 <= n, k <= 30
- 1 <= target <= 1000
관련자료
- 
			링크
			댓글 1
					
			Coffee님의 댓글
- 익명
- 작성일
					
										
					Runtime: 17 ms, faster than 82.26% of Java online submissions for Number of Dice Rolls With Target Sum.
Memory Usage: 41.6 MB, less than 78.98% of Java online submissions for Number of Dice Rolls With Target Sum.
				
													
								Memory Usage: 41.6 MB, less than 78.98% of Java online submissions for Number of Dice Rolls With Target Sum.
class Solution {
    
    private final int MODULO = 1000000007;
    private Integer[][] cache;
    
    private int n = 0;
    private int k = 0;
    
    public int numRollsToTarget(int n, int k, int target) {
        
        this.n = n;
        this.k = k;
        this.cache = new Integer[n+1][target+1];
        return dp(0, target);
        
        
    }
    
    public int dp(int i, int remain){
        // escape condition
        if(i == n && remain == 0){
            return 1;  
        } 
        
        if(i > n || remain < 0){
            return 0;  
        } 
        
        if(cache[i][remain] != null){
            return cache[i][remain];
        } 
        
        int ans = 0;
        for(int num = 1; num <= k; num++) {
            ans += dp(i + 1, remain - num);
            ans %= MODULO;
        }
        
        return cache[i][remain] = ans;
    }
} 
								 
							







