
출처: 프로그래머, https://programmers.co.kr/learn/courses/30/lessons/42898
# 오른쪽과 아래로만 움직임
# 물웅덩이의 좌표가 주어짐
# 좌상단 집, 우하단 학교
# 집에서 학교까지 갈 수 있는 최단 거리의 개수 % 1000000007
더보기
가장 먼저 생각할 것
1. mxn
좌표가 변경되었습니다
이……생각해보니……문제의 좌표가 모두 바뀌었다.
따라서 웅덩이의 좌표도 변경되었습니다.
예시가 (2, 2)인 것을 보면 그냥 때려달라고 한 문제인 것 같다.
주의 깊게 확인합시다. 왠지 Lv. 3이었다.
2. 최단거리
왼쪽 위에서 오른쪽 아래, 오른쪽, 아래로만 이동하기 때문에 항상 가장 짧은 거리가 나옵니다.
핵심은 최단 거리가 아니라 경로의 수임을 인식하십시오.
설명
def solution(m, n, puddles):
# 오른쪽과 아래쪽으로만 움직이니까 모든 경로가 최단 경로
# 즉, 최단 경로가 중요한게 아니라 그 타일까지 올 수 있는 경우의 수를 계산하는 것
# 최단 경로의 개수 % 1000000007
# D(i)(j) = D(i-1)(j) + D(i)(j-1)
D = ((0 for _ in range(m + 1)) for _ in range(n + 1))
D(1)(1) = 1
puddles = set((tuple((p_r, p_c)) for p_c, p_r in puddles))
#(1, 1) 제외, puddles 제외 하고 좌, 상 더해서 업데이트
for i in range(1, n+1):
for j in range(1, m + 1):
if (i, j) == (1, 1) or (i, j) in puddles:
continue
D(i)(j) = D(i-1)(j) + D(i)(j-1)
return D(n)(m) % 1000000007
Github