Notion에서 작성한 글이라, 여기에서 더 깔끔하게 보실 수 있습니다! 😮😊
def solution(m, n, puddles):
dp = [[0]*(m+1) for _ in range(n+1)]
for x, y in puddles:
dp[y][x] = 1
dp[1][0] = 1
for i in range(1, n+1):
for j in range(1, m+1):
if dp[i][j]: dp[i][j] = 0
else: dp[i][j] = (dp[i-1][j]+dp[i][j-1]) % 1000000007
return dp[-1][-1]
0
으로 초기화한다. 이 때, 크기는 으로 만든다.puddles
처리도 깔끔해지고,1
로 마킹해 놓는다.1
인 경우 (물에 잠긴 지역인 경우) 도달할 수 없는 곳이라고 볼 수 있으므로 0
을 할당하고,1
이 아닌 경우 최단경로를 갱신한다.def solution(m, n, puddles):
dp = [[1]*m for _ in range(n)]
zero_i, zero_j = 101, 101
for x, y in puddles:
dp[y-1][x-1] = 0
if x == 1: zero_i = min(zero_i, y)
if y == 1: zero_j = min(zero_j, x)
if zero_i < 101:
for i in range(zero_i, n):
dp[i][0] = 0
if zero_j < 101:
for j in range(zero_j, m):
dp[0][j] = 0
for i in range(1, n):
for j in range(1, m):
if dp[i][j]: dp[i][j] = (dp[i-1][j]+dp[i][j-1]) % 1000000007
return dp[-1][-1]
1
로 초기화한다. 이 때, 크기는 으로 만든다.1
로 초기화했으므로, 에 물에 잠긴 지역을 마킹하면서 이 지역이 첫 번째 행이나 첫 번째 열에 위치한 경우 그 위치를 마킹해 놓고, 그 뒤에 오는 지역에 대해 모두 0
으로 바꿔주어야 한다. if
문과 min()
갱신에 추가적인 시간이 소요된다.