데브허브 | DEVHUB | Paths in Matrix Whose Sum Is Divisible by K - Leetcode 2435 - PythonPaths in Matrix Whose Sum Is Divisible by K - Leetcode 2435 - Python
- 그리드 내에서 상단 좌측부터 하단 우측까지 이동하며, 경로 상의 숫자 합이 K로 나누어 떨어지는 경로의 수를 계산하는 문제. 🗺️
- 중복되는 하위 문제와 최적 부분 구조를 활용하는 동적 프로그래밍(DP)이 핵심 해결 전략. 🧠
- DP 상태는
(현재 행, 현재 열, 현재까지의 합을 K로 나눈 나머지)의 3차원 튜플로 정의하여 하위 문제의 고유성을 식별. 🧩
- 경로 합이 무한히 커지는 것을 방지하고 DP 상태 공간을
0부터 K-1까지로 제한하기 위해 각 단계에서 나머지 연산(% K)을 적용. 🔢
- 하향식(Top-Down) DP는 재귀 함수와 메모이제이션(캐싱)을 사용하여 중복 계산을 방지하며, 기저 사례부터 역으로 계산. ⬇️
- 기저 사례는 그리드 범위를 벗어나거나(0 경로) 목표 지점(경로 합이 K로 나누어 떨어지면 1, 아니면 0)에 도달했을 때 정의. 🎯
- 전이 함수는 현재 위치에서 아래로 이동하는 경로와 오른쪽으로 이동하는 경로의 수를 합산하여 현재 하위 문제의 해를 도출. ➕
- 상향식(Bottom-Up) DP는 반복문을 통해 DP 테이블을 채워나가는 방식으로, 재귀 오버헤드 없이 효율적인 계산 가능. ⬆️
- 반복 순서는 재귀 솔루션과의 일관성을 위해 목표 지점(오른쪽 아래)부터 시작 지점(왼쪽 위)으로 역순으로 반복하여 DP 테이블을 채움. 🔄
- 시간 및 공간 복잡도는
O(행 * 열 * K)로, 그리드 크기와 K 값에 비례하는 효율적인 해결책. ⏱️
- 파이썬은 큰 정수를 자동으로 처리하지만, DP에서는 명시적으로 나머지 값을 추적해야 함. 🐍
- 최종 결과는 DP 테이블의
[0][0][0] 위치에 저장된 값으로, 시작점에서 나머지 0으로 시작하는 경로의 수를 의미. ✅