diff --git "a/leetcode3/\354\265\234\354\233\220\354\244\200/1219. Path with Maximum Gold" "b/leetcode3/\354\265\234\354\233\220\354\244\200/1219. Path with Maximum Gold" new file mode 100644 index 00000000..0ced48ab --- /dev/null +++ "b/leetcode3/\354\265\234\354\233\220\354\244\200/1219. Path with Maximum Gold" @@ -0,0 +1,59 @@ +# + +''' +1. 아이디어 : +모든 선택은 상태값을 들고 있어야한다. +재귀 백트래킹을 통해 롤백. + +2. 시간복잡도 : + O(4 ** 25) + +3. 자료구조/알고리즘 : +dfs, backtracking + +''' +class Solution: + def getMaximumGold(self, grid: list[list[int]]) -> int: + n = len(grid) + m = len(grid[0]) + # n <= 15 + # 비싼쪽으로X 다익스트라X 백트래킹? 4**25 압축? + + dx = [0,0,1,-1] + dy = [1,-1,0,0] + + def dfs(row, col): + gold = grid[row][col] + grid[row][col] = 0 # + + max_gold = 0 + for i in range(4): + nx = row + dx[i] + ny = col + dy[i] + + if 0<= nx int: + + def max_length(node): #deepest, longest + if not node: + return 0, 0 + + left_deepest, left_longest = max_length(node.left) + right_deepest, right_longest = max_length(node.right) + + return max(left_deepest, right_deepest) + 1, max(left_longest, right_longest, left_deepest + right_deepest) + + return max_length(root)[1]