diff --git a/non-overlapping-intervals/YeomChaeeun.ts b/non-overlapping-intervals/YeomChaeeun.ts new file mode 100644 index 000000000..0547fbe93 --- /dev/null +++ b/non-overlapping-intervals/YeomChaeeun.ts @@ -0,0 +1,19 @@ + +/** + * 알고리즘 복잡도 + * - 시간 복잡도: O(nlogn) + * - 공간 복잡도: O(1) + */ +function eraseOverlapIntervals(intervals: number[][]): number { + intervals.sort((a, b) => a[1] - b[1]) + let end = intervals[0][1] + let count = 0 + for(let i = 1; i < intervals.length; i++) { + if(intervals[i][0] < end) { + count++ + } else { + end = intervals[i][1] + } + } + return count +} diff --git a/remove-nth-node-from-end-of-list/YeomChaeeun.ts b/remove-nth-node-from-end-of-list/YeomChaeeun.ts new file mode 100644 index 000000000..ca5e77424 --- /dev/null +++ b/remove-nth-node-from-end-of-list/YeomChaeeun.ts @@ -0,0 +1,38 @@ +/** + * Definition for singly-linked list. + * class ListNode { + * val: number + * next: ListNode | null + * constructor(val?: number, next?: ListNode | null) { + * this.val = (val===undefined ? 0 : val) + * this.next = (next===undefined ? null : next) + * } + * } + */ +/** + * n번째 노드 제거하기 + * 알고리즘 복잡도 + * - 시간 복잡도: O(n) + * - 공간 복잡도: O(n) + * @param head + * @param n + */ +function removeNthFromEnd(head: ListNode | null, n: number): ListNode | null { + let stack: ListNode[] = []; + let node = head; + + while (node) { + stack.push(node); + node = node.next; + } + + // 첫 번째 노드를 제거하는 경우 추가 + if (stack.length - n - 1 < 0) { + return head?.next || null; + } + + const prevNode = stack[stack.length - n - 1]; + prevNode.next = prevNode.next?.next || null; + + return head; +} diff --git a/same-tree/YeomChaeeun.ts b/same-tree/YeomChaeeun.ts new file mode 100644 index 000000000..11b8dbf38 --- /dev/null +++ b/same-tree/YeomChaeeun.ts @@ -0,0 +1,29 @@ +/** + * Definition for a binary tree node. + * class TreeNode { + * val: number + * left: TreeNode | null + * right: TreeNode | null + * constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) { + * this.val = (val===undefined ? 0 : val) + * this.left = (left===undefined ? null : left) + * this.right = (right===undefined ? null : right) + * } + * } + */ +/** + * 같은 트리인지 확인하기 + * 알고리즘 복잡도 + * - 시간 복잡도: O(n) + * - 공간 복잡도: O(n) + * @param p + * @param q + */ +function isSameTree(p: TreeNode | null, q: TreeNode | null): boolean { + if(!p || !q) { + return p === q; + } + + return p.val === q.val && isSameTree(p.left, q.left) && isSameTree(p.right, q.right) + +}