diff --git "a/leetcode3/\354\235\264\354\247\204\355\235\254/1219. Path with Maximum Gold.java" "b/leetcode3/\354\235\264\354\247\204\355\235\254/1219. Path with Maximum Gold.java" new file mode 100644 index 00000000..9617f088 --- /dev/null +++ "b/leetcode3/\354\235\264\354\247\204\355\235\254/1219. Path with Maximum Gold.java" @@ -0,0 +1,57 @@ +/* +1. 아이디어: + - 2차원 배열에서 가장 많은 금을 가지는 루트로 이동해서 최대 금의 합 구하기 + - 백트랙킹을 사용하기 때문에 dfs사용 + - 0이아닌 경로를 dfs로 돌리면서 최대 금의 개수를 누적한다. + +2. 시간복잡도: O(N*M) + +3. 자료구조/알고리즘: 백트랙킹 +*/ + +class Solution { + private boolean[][] visited; + private int n,m; + private int[] dy = {0,1,0,-1}; + private int[] dx = {1,0,-1,0}; + + public int getMaximumGold(int[][] grid) { + n = grid.length; + m = grid[0].length; + + int gold = 0; + + visited = new boolean[n][m]; + + for(int i=0; i=n || nx>=m) continue; + if(visited[ny][nx] || map[ny][nx] == 0) continue; + + sum = Math.max(sum, dfs(map, ny, nx)); + } + + visited[y][x] = false; + + return sum + map[y][x]; + } +} \ No newline at end of file diff --git "a/leetcode3/\354\235\264\354\247\204\355\235\254/543. Diameter of Binary Tree.java" "b/leetcode3/\354\235\264\354\247\204\355\235\254/543. Diameter of Binary Tree.java" new file mode 100644 index 00000000..a0fb1f95 --- /dev/null +++ "b/leetcode3/\354\235\264\354\247\204\355\235\254/543. Diameter of Binary Tree.java" @@ -0,0 +1,32 @@ +/* + +1. 아이디어 : 이진트리에서 두 노드 사이의 가장 긴 경로 구하기 + 이진트리 구조의 원리를 이용하여 dfs로 최대 간선의 길이를 구한다. + +2. 시간복잡도 : O(N) + +3. 자료구조/알고리즘 : DFS + + */ + +class Solution { + private int ans; + + public int diameterOfBinaryTree(TreeNode root) { + ans = 0; + + dfs(root); + return ans; + } + + private int dfs(TreeNode node) { + if(node == null) return 0; + + int l = dfs(node.left); + int r = dfs(node.right); + + ans = Math.max(ans, l+r); + + return 1 + Math.max(l, r); + } +} \ No newline at end of file