Algorithm/๋™์ ๊ณ„ํš๋ฒ•

[Dynamic Programming] ์ตœ์†Œ ๋น„์šฉ ๊ตฌํ•˜๊ธฐ - ์ดˆ๊ธ‰

ํด๋กœ์ด๐Ÿ“ 2023. 10. 20. 14:21
์œ ํŠญ ๋งใ…‹

 

๐Ÿ“‹ 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]

์ง€์ €๋ถ„ํ•˜์ง€๋งŒ ํ†ต๊ณผ!