From bf8d1ff6e99b447d81118fab10da00c35f4457c4 Mon Sep 17 00:00:00 2001 From: SeonjaeLee Date: Mon, 28 Oct 2024 18:58:17 +0900 Subject: [PATCH 1/3] 1. same tree --- same-tree/sunjae95.js | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 same-tree/sunjae95.js diff --git a/same-tree/sunjae95.js b/same-tree/sunjae95.js new file mode 100644 index 000000000..70bceb335 --- /dev/null +++ b/same-tree/sunjae95.js @@ -0,0 +1,22 @@ +/** + * @description + * 두개의 트리를 동시에 순회한다를 초점으로 문제접근하여 풀이 + * + * n = minimum tree node count of p or q + * time complexity: O(n) + * space complexity: O(1) + */ +var isSameTree = function (p, q) { + const preOrder = (tree1, tree2) => { + if (!tree1 && !tree2) return true; + if (!tree1 || !tree2) return false; + + if (tree1.val !== tree2.val) return false; + if (!preOrder(tree1.left, tree2.left)) return false; + if (!preOrder(tree1.right, tree2.right)) return false; + + return true; + }; + + return preOrder(p, q); +}; From 9eb911e3e816e9bd37e9d4c5c166506207ff6e86 Mon Sep 17 00:00:00 2001 From: SeonjaeLee Date: Mon, 28 Oct 2024 19:31:38 +0900 Subject: [PATCH 2/3] 2. Remove Nth Node From End of List --- remove-nth-node-from-end-of-list/sunjae.js | 36 ++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 remove-nth-node-from-end-of-list/sunjae.js diff --git a/remove-nth-node-from-end-of-list/sunjae.js b/remove-nth-node-from-end-of-list/sunjae.js new file mode 100644 index 000000000..57951855c --- /dev/null +++ b/remove-nth-node-from-end-of-list/sunjae.js @@ -0,0 +1,36 @@ +/** + * @description + * 전체 노드의 길이를 구한 뒤 n에 적합한 노드만 건너뛰어 노드를 재배열 시켜줌 + * + * n = total length of head node list + * time complexity: O(n) + * space complexity: O(n) + */ +var removeNthFromEnd = function (head, n) { + let node; + let nodeCount = 0; + + node = head; + while (node) { + nodeCount++; + node = node.next; + } + + let answer = new ListNode(); + let answerNode = answer; + + node = head; + for (let i = 0; i < nodeCount; i++) { + if (nodeCount - n === i) { + i++; + node = node.next; + } + + answerNode.next = node; + answerNode = node; + + node = node?.next ?? null; + } + + return answer.next; +}; From f493e8a241e042e4c336927e8c31a6284b515908 Mon Sep 17 00:00:00 2001 From: SeonjaeLee Date: Mon, 28 Oct 2024 19:54:45 +0900 Subject: [PATCH 3/3] 4. Merge Intervals --- merge-intervals/sunjae95.js | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 merge-intervals/sunjae95.js diff --git a/merge-intervals/sunjae95.js b/merge-intervals/sunjae95.js new file mode 100644 index 000000000..6aaaaf8ae --- /dev/null +++ b/merge-intervals/sunjae95.js @@ -0,0 +1,28 @@ +/** + * @description + * 각 intervals의 시작점을 기준으로 정렬 후 tmp의 end와 각 start를 비교하여 풀이 + * + * n = length of intervals + * time complexity: O(n log n) + * space complexity: O(n) + */ +var merge = function (intervals) { + intervals.sort((a, b) => a[0] - b[0]); + + const answer = []; + let mergeTmp = intervals[0]; + + for (let i = 1; i < intervals.length; i++) { + const [start, end] = intervals[i]; + + if (mergeTmp[1] >= start) mergeTmp[1] = Math.max(mergeTmp[1], end); + else { + answer.push(mergeTmp); + mergeTmp = [start, end]; + } + } + + answer.push(mergeTmp); + + return answer; +};