코딩 테스트 및 알고리즘/leetcode for google
leetcode hard : Paths in Matrix Whose Sum Is Divisible by K
띠리링구
2022. 10. 14. 15:59
https://leetcode.com/problems/paths-in-matrix-whose-sum-is-divisible-by-k/
k로 나눠 떨어지는 path의 개수를 세라는건데
k로 나눈다는 조건이 없으면 그냥 우리가 어릴때 배웠던 길 개수 세기랑 똑같다.
문제는 m-1, n-1에 도달하기 전까진 끝에서 k로 나눴을때 remainder가 얼마나될지 알수가 없다는 것이다.
그래서 특정 remainder의 path개수가 얼마나 되는지 실시간으로 카운트하고
마지막에 remainder가 0인 path개수를 리턴하면 된다.
class Solution:
def numberOfPaths(self, grid: List[List[int]], k: int) -> int:
m, n = len(grid), len(grid[0])
dp = [[[0] * k for _ in range(n)] for _ in range(m)]
for i in range(m):
for j in range(n):
if i == 0 and j == 0:
dp[0][0][grid[0][0] % k] += 1
continue
if i == 0:
for mod in range(k):
dp[i][j][(mod + grid[i][j]) % k] += dp[i][j-1][mod] % (10 ** 9 + 7)
continue
if j == 0:
for mod in range(k):
dp[i][j][(mod + grid[i][j]) % k] += dp[i-1][j][mod] % (10 ** 9 + 7)
continue
for mod in range(k):
dp[i][j][(mod + grid[i][j]) % k] += dp[i][j-1][mod] % (10 ** 9 + 7)
dp[i][j][(mod + grid[i][j]) % k] += dp[i-1][j][mod] % (10 ** 9 + 7)
return dp[m - 1][n - 1][0] % (10 ** 9 + 7)