From 4fa44f0840b9706cb95c143e5d21b62d28eff315 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9E=A5=EC=9E=AC=EC=A0=95=20=5B=EC=BA=90=ED=85=8C?= =?UTF-8?q?=EC=84=9C=EB=B9=84=EC=8A=A4=5D?= Date: Sat, 26 Oct 2024 11:40:56 +0900 Subject: [PATCH 1/4] same tree --- same-tree/jaejeong1.java | 44 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 same-tree/jaejeong1.java diff --git a/same-tree/jaejeong1.java b/same-tree/jaejeong1.java new file mode 100644 index 000000000..7a372c561 --- /dev/null +++ b/same-tree/jaejeong1.java @@ -0,0 +1,44 @@ + +// Definition for a binary tree node. +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) { + // 풀이: 재귀로 left와 right를 비교하면서 같은지 확인한다. + // TC: O(N) + // SC: O(N) + return dfs(p, q); + } + + private boolean dfs(TreeNode p, TreeNode q) { + if (p == null || q == null) { + return p == q; // 둘 다 null이면 true, 하나만 null이면 false + } + + if (p.val != q.val) { // 값이 다르면 false + return false; + } + + if (p.left != null && !dfs(p.left, q.left)) { // 둘 중 하나만 null인 케이스는 위에서 걸러져, p.left 하나만 null 여부를 체크하면 npe 방지할 수 있다 + return false; // 둘다 null이 아닐때만 dfs 값비교를 하고, 결과가 false 라면 false 반환하고 중단 + } + + if (p.right != null && !dfs(p.right, q.right)) { + return false; + } + + return true; // 값이 다른 케이스가 없으면 true 반환 + } +} From ec01f2cdeaf94797064cc68b401367fc4bb01041 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9E=A5=EC=9E=AC=EC=A0=95=20=5B=EC=BA=90=ED=85=8C?= =?UTF-8?q?=EC=84=9C=EB=B9=84=EC=8A=A4=5D?= Date: Sat, 2 Nov 2024 01:57:55 +0900 Subject: [PATCH 2/4] removeNthFromEnd --- .../jaejeong1.java | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 remove-nth-node-from-end-of-list/jaejeong1.java diff --git a/remove-nth-node-from-end-of-list/jaejeong1.java b/remove-nth-node-from-end-of-list/jaejeong1.java new file mode 100644 index 000000000..3354af836 --- /dev/null +++ b/remove-nth-node-from-end-of-list/jaejeong1.java @@ -0,0 +1,43 @@ +import java.util.LinkedList; + +// Definition for singly-linked list. +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 static void main(String[] args) { + Solution s = new Solution(); + var node = new ListNode(1, new ListNode(2)); + s.removeNthFromEnd(node, 1); + } + + public ListNode removeNthFromEnd(ListNode head, int n) { + // 문제: 링크드리스트의 head가 주어지면 끝에서 N번째 노드를 삭제한 결과를 반환하라 + // 풀이: n번째만큼 first 이동, 그 후 second를 1칸씩 함께 이동 시킨다 first가 끝에 도달할 때 까지 + // 전체 길이 L, 주어진 N이 있을때 이렇게 하면 L - N - 1 위치를 구할 수 있다. + // TC: O(N) + // SC: O(1) + var dummy = new ListNode(-1, head); + var first = head; + for (int i=0; i Date: Sat, 2 Nov 2024 16:58:58 +0900 Subject: [PATCH 3/4] Merge Intervals --- merge-intervals/jaejeong1.java | 35 ++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 merge-intervals/jaejeong1.java diff --git a/merge-intervals/jaejeong1.java b/merge-intervals/jaejeong1.java new file mode 100644 index 000000000..81f1a3394 --- /dev/null +++ b/merge-intervals/jaejeong1.java @@ -0,0 +1,35 @@ +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Comparator; +import java.util.List; + +class Solution { + + public int[][] merge(int[][] intervals) { + // TC: O(N log N) + // SC: O(N) + + // length가 2보다 적으면 그대로 반환 + if (intervals.length < 2) { + return intervals; + } + + List output = new ArrayList<>(); + + // intervals 배열을 시작 시간 기준으로 정렬 + Arrays.sort(intervals, Comparator.comparingInt(a -> a[0])); + + for (int[] interval : intervals) { + // output이 비어있거나, 현재 interval이 마지막에 추가된 구간과 겹치지 않으면 추가 + if (output.isEmpty() || output.get(output.size() - 1)[1] < interval[0]) { + output.add(interval); + } else { + // 겹치는 경우, 마지막 구간의 끝 시간을 업데이트 + output.get(output.size() - 1)[1] = Math.max(output.get(output.size() - 1)[1], interval[1]); + } + } + + // List를 int[][] 배열로 변환하여 반환 + return output.toArray(new int[output.size()][]); + } +} From 97a452ca2477f5db7f20b0fc1963a3010cc7c6a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9E=A5=EC=9E=AC=EC=A0=95=20=5B=EC=BA=90=ED=85=8C?= =?UTF-8?q?=EC=84=9C=EB=B9=84=EC=8A=A4=5D?= Date: Sun, 3 Nov 2024 15:48:09 +0900 Subject: [PATCH 4/4] =?UTF-8?q?refactor:=20=EB=B6=84=EA=B8=B0=EB=AC=B8=20?= =?UTF-8?q?=EA=B0=84=EC=86=8C=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- same-tree/jaejeong1.java | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/same-tree/jaejeong1.java b/same-tree/jaejeong1.java index 7a372c561..14a72656b 100644 --- a/same-tree/jaejeong1.java +++ b/same-tree/jaejeong1.java @@ -31,14 +31,6 @@ private boolean dfs(TreeNode p, TreeNode q) { return false; } - if (p.left != null && !dfs(p.left, q.left)) { // 둘 중 하나만 null인 케이스는 위에서 걸러져, p.left 하나만 null 여부를 체크하면 npe 방지할 수 있다 - return false; // 둘다 null이 아닐때만 dfs 값비교를 하고, 결과가 false 라면 false 반환하고 중단 - } - - if (p.right != null && !dfs(p.right, q.right)) { - return false; - } - - return true; // 값이 다른 케이스가 없으면 true 반환 + return dfs(p.left, q.left) && dfs(p.right, q.right); } }