728x90
반응형

1. 오늘의 학습 키워드
DFS
멀티해시맵
2. 오늘의 학습 문제
문제
https://leetcode.com/problems/deepest-leaves-sum/description/
코드
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ /* 1. 멀티해시맵에 키:밸류=depth:노드값 리스트 를 선언한다. 2. 노드를 DFS순회하여 최하단 노드일시 멀티해시맵에 값을 저장한다. 3. 멀티해시맵에서 가장 큰 키의 값들을 더해 반환한다. */ import java.util.*; class Solution { static Map<String, List<Integer>> multiMap; public int deepestLeavesSum(TreeNode root) { multiMap= new HashMap<String, List<Integer>>() ; //멀티해시맵 선언, 키:밸류= dpeth:노드값리스트 DFS(root, 0); Set<String> keys = multiMap.keySet(); String maxKey = Collections.max(keys, Comparator.comparingInt(Integer::parseInt)); //가장 큰 수의 키 찾기. return getSumOfValues(multiMap, maxKey); //가장 큰 키에 대한 밸류값합 반환 } public void DFS(TreeNode node, int depth){ if(node.left!=null){ //왼쪽 자식 있을 때 DFS(node.left, depth+1); } if(node.right!=null){ //오른쪽 자식 있을 때 DFS(node.right, depth+1); } if(node.left== null && node.right==null){ //최하단 노드면 String key=String.valueOf(depth); if(!multiMap.containsKey(key)){ //멀티맵에 depth키가 업으면 추가 multiMap.put(key, new ArrayList<Integer>()); } multiMap.get(key).add(node.val); //노드의 밸류 추가 } } public static int getSumOfValues(Map<String, List<Integer>> mMap, String maxKey){ List<Integer> values= mMap.get(maxKey) ; //키에 대한 값들을 리스트에 저장 int sum=0; for(int value :values){ //키에 대한 값들을 더함 sum+=value; } return sum; } }
1. 멀티해시맵에 키:밸류=depth:노드값 리스트 를 선언한다.
2. 노드를 DFS순회하여 최하단 노드일시 멀티해시맵에 값을 저장한다.
3. 멀티해시맵에서 가장 큰 키의 값들을 더해 반환한다.
런타임이 9ms로 길게 나왔는데, 해시맵에 일일이 저장하지 않고, maxDepth와 sum을 저장하고 최하단노드일때 현재 depth를 비교하고 같으면 sum을 더하고, depth가 maxDepth보다 크면 값을 갱신하는 식으로 설정하면 메모리를 더 적게 쓸 것이다.
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ /* 1. 최대깊이 maxDepth와 합계 sum을 전역변수 설정한다. 2. 노드를 DFS순회하여 최하단 노드일시 masDepth와 비교하여 sum을 갱신한다. 3. DFS순회가 완료되면 sum을 반환한다. */ import java.util.*; class Solution { static int maxDepth; static int sum; public int deepestLeavesSum(TreeNode root) { maxDepth=0; sum=0; DFS(root, 0); return sum; //가장 큰 키에 대한 밸류값합 반환 } public void DFS(TreeNode node, int depth){ if(node.left!=null){ //왼쪽 자식 있을 때 DFS(node.left, depth+1); } if(node.right!=null){ //오른쪽 자식 있을 때 DFS(node.right, depth+1); } if(node.left== null && node.right==null){ //최하단 노드면 if(depth==maxDepth){ //maxDepth와 같다면 sum에 합산 sum+=node.val; } else if( depth>maxDepth){ //maxDepth를 갱신하고 sum초기화 maxDepth=depth; sum=node.val; } } } }
그렇게 새로 코드를 작성했는데, 1ms로 시간이 단축되었다.
3. 오늘의 회고
- 리트코드에는 런타임을 다른 유저와 비교할 수 있어서, 더 효율적으로 코드를 작성하여 메모리를 줄이고 시간을 높이는 방법에 대해 고민할 수 있다. 이번에는 그렇게 하여 시간을 단축시키는 코드를 새로 작성해보았다.
- 어제 TIL작성을 하지 못해서 TIL챌린지가 0일차로 초기화됐다 🥺 6월 한 달간 매일 작성하여 TIL챌린지 28일 작성을 달성해보자.
99클럽
코딩테스트 준비
개발자 취업
항해99
TIL
728x90
반응형
'공부 > 2024 항해99코딩클럽' 카테고리의 다른 글
99클럽 코테 스터디 15일차 TIL + [LeetCode] 2415. Reverse Odd Levels of Binary Tree/DFS/포화이진트리 (1) | 2024.06.03 |
---|---|
99클럽 코테 스터디 14일차 TIL + [LeetCode] 797. All Paths From Source to Target JAVA풀이/DFS (0) | 2024.06.02 |
99클럽 코테 스터디 11일차 TIL + DFS/프로그래머스 [타겟 넘버] JAVA풀이 (0) | 2024.05.30 |
99클럽 코테 스터디 10일차 TIL + 완전탐색/DFS/프로그래머스 [소수 찾기] JAVA풀이 (0) | 2024.05.30 |
99클럽 코테 스터디 9일차 TIL + 완전탐색/프로그래머스 [카펫]/JAVA풀이 (0) | 2024.05.28 |