[LeetCode] 101. Symmetric Tree (Easy)

문제로 정답 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 구현을 못해서 힌트 받고 품 /** * 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; * } * } */ class Solution { public boolean isSymmetric(TreeNode root) { return checkSymmetric(root.left, root.right); } boolean checkSymmetric(TreeNode left, TreeNode right){ if(left == null && right != null) return false; if(right == null && left != null) return false; if(right == null && left == null) return true; if(left.val != right.val) return false; if(checkSymmetric(left.left, right.right) == false) return false; if(checkSymmetric(left.right, right.left) == false) return false; return true; } } 타인의 답 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 class Solution { public boolean isSymmetric(TreeNode root) { if (root == null) { return true; } return isMirror(root.left, root.right); } private boolean isMirror(TreeNode node1, TreeNode node2) { if (node1 == null && node2 == null) { return true; } if (node1 == null || node2 == null) { return false; } return node1.val == node2.val && isMirror(node1.left, node2.right) && isMirror(node1.right, node2.left); } }

2024년 6월 25일 · 김태영

[LeetCode] 104. Maximum Depth of Binary Tree (Easy)

문제로 정답 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 구현을 못해서 힌트 받고 품 /** * 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; * } * } */ class Solution { public int maxDepth(TreeNode root) { if(root == null) return 0; return m(root, 0); } private int m(TreeNode node, int d) { if(node == null) return d; d = d + 1; int l = m(node.left, d); int r = m(node.right, d); if(l > r) return l; else return r; } }

2024년 6월 25일 · 김태영

[LeetCode] 100. Same Tree (Easy)

문제로 정답 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 구현을 못해서 힌트 받고 품 /** * 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; * } * } */ class Solution { public boolean isSameTree(TreeNode p, TreeNode q) { return test(p, q, true); } private boolean test(TreeNode p, TreeNode q, boolean b) { if( b == false) return false; if(p == null && q != null) return false; if(p != null && q == null) return false; if(p == null && q == null) return true; b = test(p.left, q.left, b); if(b == false) return false; if(p.val != q.val) return false; b = test(p.right, q.right, b); return b; } } 타인의 답 1 2 3 4 5 6 7 8 9 10 11 12 13 class Solution { public boolean isSameTree(TreeNode p, TreeNode q) { if (p == null && q == null) { return true; } if (p != null && q != null && p.val == q.val) { return isSameTree(p.left, q.left) && isSameTree(p.right, q.right); } return false; } } 참고 1. 전위 순회 (Pre-order Traversal) 전위 순회에서는 각 노드를 방문하는 순서가 루트-왼쪽-오른쪽입니다. 즉, 먼저 루트를 방문하고, 그 다음에 왼쪽 서브트리를 방문한 후, 오른쪽 서브트리를 방문합니다. ...

2024년 6월 24일 · 김태영

[LeetCode] 94. Binary Tree Inorder Traversal (Easy)

문제로 정답 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 구현을 못해서 힌트 받고 품 /** * 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; * } * } */ class Solution { public List<Integer> inorderTraversal(TreeNode root) { List<Integer> result = new ArrayList(); inOrder(result, root); return result; } public void inOrder(List<Integer> list, TreeNode node){ if(node == null) return; inOrder(list, node.left); list.add(node.val); inOrder(list, node.right); } } 참고 1. 전위 순회 (Pre-order Traversal) 전위 순회에서는 각 노드를 방문하는 순서가 루트-왼쪽-오른쪽입니다. 즉, 먼저 루트를 방문하고, 그 다음에 왼쪽 서브트리를 방문한 후, 오른쪽 서브트리를 방문합니다. ...

2024년 6월 23일 · 김태영

[LeetCode] 88. Merge Sorted Array (Easy)

문제로 정답 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 class Solution { public void merge(int[] nums1, int m, int[] nums2, int n) { int i = m - 1; int j = n - 1; int k = m + n - 1; while(i >= 0 && j >= 0) { if(nums1[i] > nums2[j]) { nums1[k--] = nums1[i--]; } else { nums1[k--] = nums2[j--]; } } while(j >= 0) { nums1[k--] = nums2[j--]; } } }

2024년 6월 21일 · 김태영

[LeetCode] 83. Remove Duplicates from Sorted List (Easy)

문제로 정답 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; this.next = next; } * } */ class Solution { public ListNode deleteDuplicates(ListNode head) { if(head == null ){ return head; } ListNode cur = head; while(cur != null && cur.next != null) { if(cur.val == cur.next.val) { cur.next = cur.next.next; } else { cur = cur.next; } } return head; } }

2024년 6월 20일 · 김태영

[LeetCode] 70. Climbing Stairs (Easy)

문제로 내가 푼 것 상상도 못함 정답 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 class Solution { public int climbStairs(int n) { if (n == 1) { return 1; } else if (n == 2) { return 2; } int prev1 = 1, prev2 = 2; for (int i = 3; i <= n; i++) { int current = prev1 + prev2; prev1 = prev2; prev2 = current; } return prev2; } } 참고 피보나치 수열을 이용하면 간단히 풀 수 있어서 Easy인가보다 ...

2024년 6월 19일 · 김태영

[일상] 추모

직접 분향소에 찾아가지 못해 미안합니다. 삼가 고인의 명복을 빕니다.

2024년 6월 19일 · 김태영

[LeetCode] 69. Sqrt(x) (Easy)

문제로 내가 푼 것 상상도 못함 정답 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 class Solution { public int mySqrt(int x) { if (x == 0) { return 0; } int left = 1, right = x; while (left <= right) { int mid = left + (right - left) / 2; if (mid == x / mid) { return mid; } else if (mid < x / mid) { left = mid + 1; } else { right = mid - 1; } } return right; } } 참고 초기 조건: 입력 값이 0일 경우, 제곱근은 0이므로 바로 반환합니다. 이진 탐색: left는 1로, right는 x로 초기화합니다. le- ft가 right보다 작거나 같을 때까지 반복합니다. 중간값 mid를 left + (right - left) / 2로 계산합니다. mid * mid가 x와 같으면 mid를 반환합니다. mid의 제곱이 x보다 작으면 left를 mid + 1로 증가시킵니다. 그렇지 않으면 right를 mid - 1로 감소시킵니다. 반환 값: 반복이 종료된 후 right를 반환합니다. 이 값이 x의 제곱근을 내림한 값입니다.

2024년 6월 18일 · 김태영

알리바바에서 16인치 모니터 득템

5월말경 알리바바가 전 축구선수 David Beckham과 전속 계약을 맺었다고 한다. 전 세계적으로 아마존같은 포지션을 원하는지 공격적인 마케팅을 하는 것 같다. 덕분에 16인치 모니터를 값싸게 샀다. ...

2024년 6월 18일 · 김태영