Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 59 additions & 0 deletions leetcode3/최원준/1219. Path with Maximum Gold
Original file line number Diff line number Diff line change
@@ -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 <n and 0<=ny < m and grid[nx][ny] != 0:
max_gold = max(max_gold, dfs(nx, ny))

grid[row][col] = gold

return gold + max_gold

ans = 0
for i in range(n):
for j in range(m):
ans = max(ans, dfs(i, j))
return ans

'''
[1,0,7],
[2,0,6],
[3,4,5],
[0,3,0],
[9,0,20]

[ 6, 0,18]
[ 6, 0,18]
[ 6,-1,18]
[ 0, 3, 0]
[ 0, 0, 0]
'''
35 changes: 35 additions & 0 deletions leetcode3/최원준/543. Diameter of Binary Tree.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
#

'''
1. 아이디어 :
- 현재 노드를 포함한게 가장 길수도 있기에 왼쪽/오른쪽 중 깊은것 리턴
- 현재 노드 자식들을 계산한게 가장 길수도 있기에 왼쪽 깊이 + 오른쪽 깊이를 리턴


2. 시간복잡도 :
O(n)

3. 자료구조/알고리즘 :
dfs

'''

class Solution:
def diameterOfBinaryTree(self, root: Optional[TreeNode]) -> 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]
Loading