๐ LeetCode 64๋ฒ
Minimum Path Sum - LeetCode
Can you solve this real interview question? Minimum Path Sum - Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right, which minimizes the sum of all numbers along its path. Note: You can only move either down or rig
leetcode.com
grid cost
[[ 1, 3, 1 ], [[ 1, 4, 5 ],
[ 1, 5, 1 ], → [ 2, _, _ ],
[ 4, 2, 1 ]] [ 6, _, _ ]]
2์ฐจ์ ๋ฐฐ์ด์ธ grid๊ฐ grid[x][y]์ผ๋ก ์ด๋ฃจ์ด์ ธ ์์ ๋, grid[0][y] ์ grid[x][0] ์ ์ต์ ๊ธธ์ด๋ ๊ณ์ฐ ์์ด๋ ์ ์ ์๋ค. (์ด๋์ด down or right๋ก ์ ํ๋์ด์๋ค.)
$$ cost[x][y] = min( grid[x-1][y] , grid[x][y-1] ) + grid[x][y] $$
ํผ๋ณด๋์น์ ๋น์ทํ ํด๊ฒฐ ๋ฐฉ๋ฒ
์๊ฐ ๋ณต์ก๋ : O(n*m)
๊ณต๊ฐ ๋ณต์ก๋ : O(n) → ๊ณ์ฐ์ ์ฌ์ฉํ๋ ๊ณต๊ฐ์ O(n) ๋๋ O(m)
+ ์๋ก์ด ๋ฐฐ์ด์ ๋ง๋ค์ง ์๊ณ ์ฃผ์ด์ง ๋ฐฐ์ด์ ๊ทธ๋๋ก cost๋ฅผ ๊ณ์ฐํ ์ ์๋ค.
๐ฉ๐ป๐ป ๋ด ํ์ด
class Solution:
def minPathSum(self, grid: List[List[int]]) -> int:
n = len(grid)
m = len(grid[0])
for i in range(n):
for j in range(m):
# print(grid)
if i == 0 and j == 0:
continue
elif i == 0 and j>0:
grid[i][j] = grid[i][j]+grid[i][j-1]
elif i>0 and j == 0:
grid[i][j] = grid[i][j]+grid[i-1][j]
else:
grid[i][j] = min(grid[i-1][j], grid[i][j-1])+grid[i][j]
return grid[n-1][m-1]
์ง์ ๋ถํ์ง๋ง ํต๊ณผ!
'Algorithm > ๋์ ๊ณํ๋ฒ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Dynamic Programming] ๋์ ๋ฐ๊พธ๊ธฐ - ์ด๊ธ (0) | 2023.10.20 |
---|---|
[Dynamic Programming] ๊ณ๋จ ์ค๋ฅด๊ธฐ - ์ด๊ธ (0) | 2023.10.20 |
[Dynamic Programming] ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ์ ๊ธฐ์ด (0) | 2023.10.20 |