From 929d8d909bf5015eb942d69ee3bada0f26f05b42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8C=E1=85=A9=E1=84=92=E1=85=A8=E1=84=85=E1=85=B5?= =?UTF-8?q?=E1=86=AB?= Date: Sat, 27 Sep 2025 12:48:44 +0900 Subject: [PATCH 1/5] invert binary tree solution --- invert-binary-tree/hyer0705.ts | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 invert-binary-tree/hyer0705.ts diff --git a/invert-binary-tree/hyer0705.ts b/invert-binary-tree/hyer0705.ts new file mode 100644 index 000000000..9f50394ff --- /dev/null +++ b/invert-binary-tree/hyer0705.ts @@ -0,0 +1,26 @@ +/** + * 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) + * } + * } + */ + +function invertTree(root: TreeNode | null): TreeNode | null { + if (!root) return null; + + const temp = root.left; + root.left = root.right; + root.right = temp; + + invertTree(root.left); + invertTree(root.right); + + return root; +} From 0ec235a519ba4d5a7c46136e4c2c12dff25ca082 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8C=E1=85=A9=E1=84=92=E1=85=A8=E1=84=85=E1=85=B5?= =?UTF-8?q?=E1=86=AB?= Date: Sat, 27 Sep 2025 13:14:36 +0900 Subject: [PATCH 2/5] search in rotated sorted array solution --- search-in-rotated-sorted-array/hyer0705.ts | 26 ++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 search-in-rotated-sorted-array/hyer0705.ts diff --git a/search-in-rotated-sorted-array/hyer0705.ts b/search-in-rotated-sorted-array/hyer0705.ts new file mode 100644 index 000000000..ab40a2777 --- /dev/null +++ b/search-in-rotated-sorted-array/hyer0705.ts @@ -0,0 +1,26 @@ +function search(nums: number[], target: number): number { + let left = 0; + let right = nums.length - 1; + + while (left <= right) { + const mid = Math.floor((left + right) / 2); + + if (nums[mid] === target) return mid; + + if (nums[mid] >= nums[left]) { + if (target < nums[mid] && target >= nums[left]) { + right = mid - 1; + } else { + left = mid + 1; + } + } else { + if (target > nums[mid] && target <= nums[right]) { + left = mid + 1; + } else { + right = mid - 1; + } + } + } + + return -1; +} From 43effe94e384d1138a65a561e4687ad4af6494fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8C=E1=85=A9=E1=84=92=E1=85=A8=E1=84=85=E1=85=B5?= =?UTF-8?q?=E1=86=AB?= Date: Sat, 27 Sep 2025 13:55:56 +0900 Subject: [PATCH 3/5] course schedule solution --- course-schedule/hyer0705.ts | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 course-schedule/hyer0705.ts diff --git a/course-schedule/hyer0705.ts b/course-schedule/hyer0705.ts new file mode 100644 index 000000000..bada3c1fd --- /dev/null +++ b/course-schedule/hyer0705.ts @@ -0,0 +1,34 @@ +function canFinish(numCourses: number, prerequisites: number[][]): boolean { + const graph: number[][] = Array.from({ length: numCourses }, () => []); + const inDegree: number[] = Array(numCourses).fill(0); + + for (const [course, prerequisite] of prerequisites) { + graph[prerequisite].push(course); + inDegree[course]++; + } + + // 지금 당장 수강할 수 있는 과목 목록 + const queue: number[] = []; + + for (let i = 0; i < numCourses; i++) { + if (inDegree[i] === 0) { + queue.push(i); + } + } + + const result: number[] = []; + while (queue.length > 0) { + const course = queue.shift()!; + result.push(course); + + for (const nextCourse of graph[course]) { + inDegree[nextCourse]--; + if (inDegree[nextCourse] === 0) { + queue.push(nextCourse); + } + } + } + + if (result.length !== numCourses) return false; + return true; +} From 869b211f5273cfda55119c052e5df6138d3e1c99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8C=E1=85=A9=E1=84=92=E1=85=A8=E1=84=85=E1=85=B5?= =?UTF-8?q?=E1=86=AB?= Date: Sat, 27 Sep 2025 14:15:51 +0900 Subject: [PATCH 4/5] jump game solution --- jump-game/hyer0705.ts | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 jump-game/hyer0705.ts diff --git a/jump-game/hyer0705.ts b/jump-game/hyer0705.ts new file mode 100644 index 000000000..94ad1adfd --- /dev/null +++ b/jump-game/hyer0705.ts @@ -0,0 +1,13 @@ +function canJump(nums: number[]): boolean { + const n = nums.length; + + let maximumReach = 0; + + for (let i = 0; i < n; i++) { + if (i > maximumReach) return false; + + maximumReach = Math.max(maximumReach, i + nums[i]); + } + + return maximumReach >= n - 1; +} From 00f2cd32315185f24972a02368d519eb8aceeae4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8C=E1=85=A9=E1=84=92=E1=85=A8=E1=84=85=E1=85=B5?= =?UTF-8?q?=E1=86=AB?= Date: Sat, 27 Sep 2025 15:08:31 +0900 Subject: [PATCH 5/5] merge k sorted lists solution --- merge-k-sorted-lists/hyer0705.ts | 37 ++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 merge-k-sorted-lists/hyer0705.ts diff --git a/merge-k-sorted-lists/hyer0705.ts b/merge-k-sorted-lists/hyer0705.ts new file mode 100644 index 000000000..050faf61d --- /dev/null +++ b/merge-k-sorted-lists/hyer0705.ts @@ -0,0 +1,37 @@ +/** + * 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) + * } + * } + */ + +function mergeKLists(lists: Array): ListNode | null { + if (!lists || lists.length === 0) return null; + + const minHeap = new PriorityQueue((a: ListNode, b: ListNode) => a.val - b.val); + + for (const node of lists) { + if (node) minHeap.enqueue(node); + } + + const dummyHead = new ListNode(); + let current = dummyHead; + + while (!minHeap.isEmpty()) { + const minimumElement = minHeap.dequeue(); + + current.next = minimumElement; + current = current.next; + + if (minimumElement.next) { + minHeap.enqueue(minimumElement.next); + } + } + + return dummyHead.next; +}