From 54c671fdbc09d7ae25d15508e912565c1812fd52 Mon Sep 17 00:00:00 2001 From: juhui Date: Mon, 18 May 2026 14:29:03 +0900 Subject: [PATCH 1/5] WEEK 12: Solutions --- same-tree/juhui-jeong.java | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/same-tree/juhui-jeong.java b/same-tree/juhui-jeong.java index 27945a6363..1f34e6d6d7 100644 --- a/same-tree/juhui-jeong.java +++ b/same-tree/juhui-jeong.java @@ -10,3 +10,29 @@ public boolean isSameTree(TreeNode p, TreeNode q) { return isSameTree(p.left, q.left) && isSameTree(p.right, q.right); } } + +class Solution { + public boolean isSameTree(TreeNode p, TreeNode q) { + Queue queueP = new LinkedList<>(); + Queue queueQ = new LinkedList<>(); + + queueP.offer(p); + queueQ.offer(q); + + while(!queueP.isEmpty() && !queueQ.isEmpty()) { + TreeNode curP = queueP.poll(); + TreeNode curQ = queueQ.poll(); + + if (curP == null && curQ == null) continue; + if (curP == null || curQ == null) return false; + + if (curP.val != curQ.val) return false; + + queueP.offer(curP.left); + queueQ.offer(curQ.left); + queueP.offer(curP.right); + queueQ.offer(curQ.right); + } + return true; + } +} From 29c5f97a3d211268043c7d618971742ce021a319 Mon Sep 17 00:00:00 2001 From: juhui Date: Tue, 19 May 2026 14:04:33 +0900 Subject: [PATCH 2/5] add: complexity --- same-tree/juhui-jeong.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/same-tree/juhui-jeong.java b/same-tree/juhui-jeong.java index 1f34e6d6d7..00c6f36fad 100644 --- a/same-tree/juhui-jeong.java +++ b/same-tree/juhui-jeong.java @@ -11,6 +11,10 @@ public boolean isSameTree(TreeNode p, TreeNode q) { } } +/* + * 시간 복잡도: O(n) + * 공간 복잡도: O(n) + */ class Solution { public boolean isSameTree(TreeNode p, TreeNode q) { Queue queueP = new LinkedList<>(); From aafcc6c108abfda19b42c7812f8a7ade5731acfa Mon Sep 17 00:00:00 2001 From: juhui Date: Tue, 19 May 2026 15:14:14 +0900 Subject: [PATCH 3/5] add:279 --- non-overlapping-intervals/juhui-jeong.java | 68 +++++++++++++++------- 1 file changed, 48 insertions(+), 20 deletions(-) diff --git a/non-overlapping-intervals/juhui-jeong.java b/non-overlapping-intervals/juhui-jeong.java index 17f7cf9c9b..826f60f174 100644 --- a/non-overlapping-intervals/juhui-jeong.java +++ b/non-overlapping-intervals/juhui-jeong.java @@ -1,51 +1,79 @@ /* - * 끝나는 시간 오름차순 정렬 - */ +처음 풀이 +시작 시간 기준 정렬 class Solution { public int eraseOverlapIntervals(int[][] intervals) { - Arrays.sort(intervals, (a,b) -> Integer.compare(a[1], b[1])); + Arrays.sort(intervals, (a,b) -> { + if (a[0] != b[0]) return Integer.compare(a[0], b[0]); + return Integer.compare(a[1], b[1]); + }); int removeCntResult = 0; - int end = intervals[0][1]; + int[] cur = intervals[0]; for (int i = 1; i< intervals.length; i++) { - if (intervals[i][0] < end) { + int [] next = intervals[i]; + + if (cur[1] > next[0]) { removeCntResult += 1; + if (next[1] < cur[1]) { + cur = next; + } } else { - end = intervals[i][1]; + cur = next; } } return removeCntResult; } } + */ /* -처음 풀이 -시작 시간 기준 정렬 + * 끝나는 시간 오름차순 정렬 + class Solution { public int eraseOverlapIntervals(int[][] intervals) { - Arrays.sort(intervals, (a,b) -> { - if (a[0] != b[0]) return Integer.compare(a[0], b[0]); - return Integer.compare(a[1], b[1]); - }); + Arrays.sort(intervals, (a,b) -> Integer.compare(a[1], b[1])); int removeCntResult = 0; - int[] cur = intervals[0]; + int end = intervals[0][1]; for (int i = 1; i< intervals.length; i++) { - int [] next = intervals[i]; - - if (cur[1] > next[0]) { + if (intervals[i][0] < end) { removeCntResult += 1; - if (next[1] < cur[1]) { - cur = next; - } } else { - cur = next; + end = intervals[i][1]; } } return removeCntResult; } } */ + +/** + * 시간 복잡도: O(n log n) + * 공간 복잡도: O(n) + */ +class Solution { + public int eraseOverlapIntervals(int[][] intervals) { + Arrays.sort(intervals, (a,b) -> a[0] - b[0]); + int count = 0; + int prevEnd = intervals[0][1]; + + for (int i = 1; i < intervals.length; i++) { + int curStart = intervals[i][0]; + int curEnd = intervals[i][1]; + + if (prevEnd <= curStart) { + // 안겹치는 경우(변경 없이 다음 배열로) + prevEnd = curEnd; + } else { + // 겹치는 경우 + count++; + prevEnd = Math.min(prevEnd, curEnd); + } + } + return count; + } +} From acd63fcc6506aad596136d0d17fb502d58937e04 Mon Sep 17 00:00:00 2001 From: juhui Date: Wed, 20 May 2026 17:05:11 +0900 Subject: [PATCH 4/5] add: 248 --- .../juhui-jeong.java | 61 ++++++++++++++----- 1 file changed, 46 insertions(+), 15 deletions(-) diff --git a/remove-nth-node-from-end-of-list/juhui-jeong.java b/remove-nth-node-from-end-of-list/juhui-jeong.java index 79b9a7836b..dc11670bb0 100644 --- a/remove-nth-node-from-end-of-list/juhui-jeong.java +++ b/remove-nth-node-from-end-of-list/juhui-jeong.java @@ -1,7 +1,32 @@ + +/* +첫 번째 풀이 +class Solution { + public ListNode removeNthFromEnd(ListNode head, int n) { + List list = new ArrayList<>(); + + while(head != null) { + list.add(head); + head = head.next; + } + + list.remove(list.size()-n); + if (list.isEmpty()) return null; + + for (int i = 0; i < list.size()-1; i++) { + list.get(i).next = list.get(i+1); + } + list.get(list.size()-1).next = null; + return list.get(0); + } +} +*/ + + /* 시간 복잡도: O(N) 공간 복잡도: O(1) -*/ + class Solution { public ListNode removeNthFromEnd(ListNode head, int n) { ListNode dummy = new ListNode(0); @@ -24,26 +49,32 @@ public ListNode removeNthFromEnd(ListNode head, int n) { return dummy.next; } } +*/ -/* -첫 번째 풀이 +/** + * + * 시간 복잡도는 O(n) + * 공간 복잡도는 O(1) + */ class Solution { public ListNode removeNthFromEnd(ListNode head, int n) { - List list = new ArrayList<>(); - - while(head != null) { - list.add(head); - head = head.next; + int length = 0; + ListNode curLenCheck = head; + + while(curLenCheck != null) { + length++; + curLenCheck = curLenCheck.next; } - list.remove(list.size()-n); - if (list.isEmpty()) return null; + int targetIndex = length - n; + if (targetIndex == 0) return head.next; - for (int i = 0; i < list.size()-1; i++) { - list.get(i).next = list.get(i+1); + ListNode targetPrev = head; + for (int i=0; i < targetIndex-1; i++) { + targetPrev = targetPrev.next; } - list.get(list.size()-1).next = null; - return list.get(0); + targetPrev.next = targetPrev.next.next; + + return head; } } -*/ From 7a0dd1150e7558ebac6582219c97afa197585268 Mon Sep 17 00:00:00 2001 From: juhui Date: Fri, 22 May 2026 14:45:19 +0900 Subject: [PATCH 5/5] add: 288 --- .../juhui-jeong.java | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 serialize-and-deserialize-binary-tree/juhui-jeong.java diff --git a/serialize-and-deserialize-binary-tree/juhui-jeong.java b/serialize-and-deserialize-binary-tree/juhui-jeong.java new file mode 100644 index 0000000000..37e4e48a52 --- /dev/null +++ b/serialize-and-deserialize-binary-tree/juhui-jeong.java @@ -0,0 +1,43 @@ + +public class Codec { + private int index; + + // Encodes a tree to a single string.(직렬화) + public String serialize(TreeNode root) { + StringBuilder sb = new StringBuilder(); + dfsSerialize(root, sb); + return sb.toString(); + } + + private void dfsSerialize(TreeNode node, StringBuilder sb) { + if (node == null) { + sb.append("null").append(","); + return; + } + sb.append(node.val).append(","); + + dfsSerialize(node.left, sb); + dfsSerialize(node.right, sb); + } + + // Decodes your encoded data to tree.(역직렬화) + public TreeNode deserialize(String data) { + String[] arr = data.split(","); + index = 0; + return dfsDeserialize(arr); + } + + private TreeNode dfsDeserialize(String[] arr) { + String value = arr[index++]; + + if (value.equals("null")) { + return null; + } + + TreeNode node = new TreeNode(Integer.parseInt(value)); + + node.left = dfsDeserialize(arr); + node.right = dfsDeserialize(arr); + return node; + } +}