From 35141d7d6b79c8896217cbc09541e79d24e4f674 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=98=81=EC=9E=AC?= Date: Sat, 22 Feb 2025 11:04:57 +0900 Subject: [PATCH 1/2] add: solve #278 Merge Intervals with ts --- merge-intervals/Yjason-K.ts | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 merge-intervals/Yjason-K.ts diff --git a/merge-intervals/Yjason-K.ts b/merge-intervals/Yjason-K.ts new file mode 100644 index 000000000..200b5aea4 --- /dev/null +++ b/merge-intervals/Yjason-K.ts @@ -0,0 +1,32 @@ +/** + * 겹치는 구간(interval)을 병합하는 함수 + * @param {number[][]} intervals - 각 구간을 나타내는 2차원 배열 [[start, end], ...] + * @returns {number[][]} - 겹치는 구간을 병합한 결과 배열 + * + * 시간 복잡도: O(n log n) + * - 정렬 과정에서 O(n log n), 병합 과정에서 O(n)으로 최종 O(n log n) + * + * 공간 복잡도: O(n) + * - 정렬된 배열을 저장하는 데 O(n), 결과 배열도 O(n)을 차지 + */ +function merge(intervals: number[][]): number[][] { + let result: number[][] = []; + + // 시작 시간을 기준으로 정렬 (오름차순) + intervals.sort((a, b) => a[0] - b[0]); + + for (let interval of intervals) { + // 결과 리스트가 비어있거나 + // 현재 구간이 이전 구간과 겹치지 않는 경우 + if (result.length === 0 || result[result.length - 1][1] < interval[0]) { + result.push(interval); // 새로운 구간 추가 + } else { + // 결과 값의 마지막 interval을 기준으로 + // 현재 구간이 이전 구간과 겹치는 경우, 두 구간을 병합 + result[result.length - 1][1] = Math.max(result[result.length - 1][1], interval[1]); + } + } + + return result; +} + From 692353404b1e9efff284d7e6e9b5f2e1d3d276fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=98=81=EC=9E=AC?= Date: Sat, 22 Feb 2025 11:05:35 +0900 Subject: [PATCH 2/2] add: solve #227 Maximum Depth of Binary Tree with ts --- maximum-depth-of-binary-tree/Yjason-K.ts | 30 ++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 maximum-depth-of-binary-tree/Yjason-K.ts diff --git a/maximum-depth-of-binary-tree/Yjason-K.ts b/maximum-depth-of-binary-tree/Yjason-K.ts new file mode 100644 index 000000000..e7da7a0f5 --- /dev/null +++ b/maximum-depth-of-binary-tree/Yjason-K.ts @@ -0,0 +1,30 @@ +/** + * 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) + * } + * } + */ + +/** + * 이진 트리의 최대 깊이를 계산하는 함수 + * @param {TreeNode | null} root - 트리의 루트 노드 + * @returns {number} - 트리의 최대 깊이 (최상위 루트에서 가장 깊은 리프까지 깊이) + * + * 시간 복잡도: O(n) + * - 모든 노드를 한 번씩 방문하여 깊이를 계산 + * + * 공간 복잡도: O(h) (h - 트리의 높이) + */ +function maxDepth(root: TreeNode | null): number { + if (!root) return 0; // 노드가 없으면 깊이는 0 + + return Math.max(maxDepth(root.left), maxDepth(root.right)) + 1; // 왼쪽, 오른쪽 서브트리 중 더 깊은 값에 +1 +}; +