From a0be0b80ee057306c617808d4b972786e63efe1c Mon Sep 17 00:00:00 2001 From: Hyejin Date: Tue, 3 Jun 2025 23:09:47 +0900 Subject: [PATCH 1/6] set empty files --- course-schedule/clara-shin.js | 0 invert-binary-tree/clara-shin.js | 0 jump-game/clara-shin.js | 0 merge-k-sorted-lists/clara-shin.js | 0 search-in-rotated-sorted-array/clara-shin.js | 0 5 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 course-schedule/clara-shin.js create mode 100644 invert-binary-tree/clara-shin.js create mode 100644 jump-game/clara-shin.js create mode 100644 merge-k-sorted-lists/clara-shin.js create mode 100644 search-in-rotated-sorted-array/clara-shin.js diff --git a/course-schedule/clara-shin.js b/course-schedule/clara-shin.js new file mode 100644 index 000000000..e69de29bb diff --git a/invert-binary-tree/clara-shin.js b/invert-binary-tree/clara-shin.js new file mode 100644 index 000000000..e69de29bb diff --git a/jump-game/clara-shin.js b/jump-game/clara-shin.js new file mode 100644 index 000000000..e69de29bb diff --git a/merge-k-sorted-lists/clara-shin.js b/merge-k-sorted-lists/clara-shin.js new file mode 100644 index 000000000..e69de29bb diff --git a/search-in-rotated-sorted-array/clara-shin.js b/search-in-rotated-sorted-array/clara-shin.js new file mode 100644 index 000000000..e69de29bb From 0377bcef033ff78501b39f26ff9b816f15608b7e Mon Sep 17 00:00:00 2001 From: Hyejin Date: Sun, 8 Jun 2025 11:35:31 +0900 Subject: [PATCH 2/6] Search in Rotated Sorted Array Solution --- search-in-rotated-sorted-array/clara-shin.js | 39 ++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/search-in-rotated-sorted-array/clara-shin.js b/search-in-rotated-sorted-array/clara-shin.js index e69de29bb..e56df706c 100644 --- a/search-in-rotated-sorted-array/clara-shin.js +++ b/search-in-rotated-sorted-array/clara-shin.js @@ -0,0 +1,39 @@ +/** + * @param {number[]} nums + * @param {number} target + * @return {number} + */ +var search = function (nums, target) { + 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[left] <= nums[mid]) { + // 타겟이 왼쪽 정렬된 범위에 있는지 확인 + if (nums[left] <= target && target < nums[mid]) { + right = mid - 1; // 왼쪽으로 이동 + } else { + left = mid + 1; // 오른쪽으로 이동 + } + } + // 오른쪽 절반이 정렬되어 있는 경우 + else { + // 타겟이 오른쪽 정렬된 범위에 있는지 확인 + if (nums[mid] < target && target <= nums[right]) { + left = mid + 1; // 오른쪽으로 이동 + } else { + right = mid - 1; // 왼쪽으로 이동 + } + } + } + + return -1; // 타겟을 찾지 못함 +}; From e48930edecfb95129f3edcb01fe973b1b9da57c7 Mon Sep 17 00:00:00 2001 From: Hyejin Date: Sun, 8 Jun 2025 11:38:43 +0900 Subject: [PATCH 3/6] Invert Binary Tree Solution --- invert-binary-tree/clara-shin.js | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/invert-binary-tree/clara-shin.js b/invert-binary-tree/clara-shin.js index e69de29bb..530ff05bb 100644 --- a/invert-binary-tree/clara-shin.js +++ b/invert-binary-tree/clara-shin.js @@ -0,0 +1,30 @@ +/** + * Definition for a binary tree node. + * function TreeNode(val, left, right) { + * this.val = (val===undefined ? 0 : val) + * this.left = (left===undefined ? null : left) + * this.right = (right===undefined ? null : right) + * } + */ +/** + * @param {TreeNode} root + * @return {TreeNode} + */ +var invertTree = function (root) { + if (!root) return null; + + const queue = [root]; + + while (queue.length > 0) { + const current = queue.shift(); + + // 자식 노드들 바꾸기 + [current.left, current.right] = [current.right, current.left]; + + // 자식 노드들을 큐에 추가 + if (current.left) queue.push(current.left); + if (current.right) queue.push(current.right); + } + + return root; +}; From fa0b9b05a5b7c0e0685cee8c44f27bd270443386 Mon Sep 17 00:00:00 2001 From: Hyejin Date: Sun, 8 Jun 2025 11:42:02 +0900 Subject: [PATCH 4/6] Course Schedule Solution --- course-schedule/clara-shin.js | 45 +++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/course-schedule/clara-shin.js b/course-schedule/clara-shin.js index e69de29bb..0f5c98998 100644 --- a/course-schedule/clara-shin.js +++ b/course-schedule/clara-shin.js @@ -0,0 +1,45 @@ +/** + * @param {number} numCourses + * @param {number[][]} prerequisites + * @return {boolean} + */ +var canFinish = function (numCourses, prerequisites) { + // 1. 인접 리스트와 진입 차수 배열 초기화 + const graph = new Array(numCourses).fill(null).map(() => []); + const inDegree = new Array(numCourses).fill(0); + + // 2. 그래프 구성 및 진입 차수 계산 + for (const [course, prereq] of prerequisites) { + graph[prereq].push(course); + inDegree[course]++; // course의 진입 차수 증가 + } + + // 3. 진입 차수가 0인 노드들을 큐에 추가 + const queue = []; + for (let i = 0; i < numCourses; i++) { + if (inDegree[i] === 0) { + queue.push(i); + } + } + + // 4. 위상 정렬 수행 + let processedCourses = 0; + + while (queue.length > 0) { + const current = queue.shift(); + processedCourses++; + + // 현재 노드와 연결된 모든 노드의 진입 차수 감소 + for (const neighbor of graph[current]) { + inDegree[neighbor]--; + + // 진입 차수가 0이 되면 큐에 추가 + if (inDegree[neighbor] === 0) { + queue.push(neighbor); + } + } + } + + // 5. 모든 강의를 처리했는지 확인 + return processedCourses === numCourses; +}; From 5e9e36b993ce3d2d3c05cb5fa55962fb392e4270 Mon Sep 17 00:00:00 2001 From: Hyejin Date: Sun, 8 Jun 2025 11:44:33 +0900 Subject: [PATCH 5/6] Jump Game Solution --- jump-game/clara-shin.js | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/jump-game/clara-shin.js b/jump-game/clara-shin.js index e69de29bb..815b2e9e5 100644 --- a/jump-game/clara-shin.js +++ b/jump-game/clara-shin.js @@ -0,0 +1,19 @@ +/** + * @param {number[]} nums + * @return {boolean} + */ +var canJump = function (nums) { + let farthest = 0; + + for (let i = 0; i < nums.length; i++) { + // 현재 위치가 지금까지 갈 수 있는 가장 먼 거리보다 멀다면 + if (i > farthest) { + return false; // 도달 불가능 + } + + // 현재 위치에서 갈 수 있는 가장 먼 거리 업데이트 + farthest = Math.max(farthest, i + nums[i]); + } + + return true; +}; From c190be45d90099fe56ecfdbd308558ca64a82c69 Mon Sep 17 00:00:00 2001 From: Hyejin Date: Sun, 8 Jun 2025 11:50:59 +0900 Subject: [PATCH 6/6] Merge k Sorted Lists Solution --- merge-k-sorted-lists/clara-shin.js | 54 ++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/merge-k-sorted-lists/clara-shin.js b/merge-k-sorted-lists/clara-shin.js index e69de29bb..9822dcc16 100644 --- a/merge-k-sorted-lists/clara-shin.js +++ b/merge-k-sorted-lists/clara-shin.js @@ -0,0 +1,54 @@ +/** + * Definition for singly-linked list. + * function ListNode(val, next) { + * this.val = (val===undefined ? 0 : val) + * this.next = (next===undefined ? null : next) + * } + */ +/** + * @param {ListNode[]} lists + * @return {ListNode} + */ +// 최적화된 K개 연결 리스트 병합 - 재귀 분할 정복 +var mergeKLists = function (lists) { + if (!lists || lists.length === 0) return null; + if (lists.length === 1) return lists[0]; + + return mergeListsRange(lists, 0, lists.length - 1); +}; + +// 범위 내의 리스트들을 재귀적으로 병합 +function mergeListsRange(lists, start, end) { + // 기저 조건: 하나의 리스트만 남은 경우 + if (start === end) { + return lists[start]; + } + + // 두 개의 리스트만 남은 경우 + if (start + 1 === end) { + return mergeTwoLists(lists[start], lists[end]); + } + + // 중간점을 기준으로 분할 + let mid = Math.floor((start + end) / 2); + let left = mergeListsRange(lists, start, mid); + let right = mergeListsRange(lists, mid + 1, end); + + return mergeTwoLists(left, right); +} + +// 두 개의 정렬된 연결 리스트를 병합 (최적화) +function mergeTwoLists(l1, l2) { + // null 체크를 먼저 수행하여 불필요한 연산 방지 + if (!l1) return l2; + if (!l2) return l1; + + // 더 작은 값을 가진 노드를 선택하고 재귀 호출 + if (l1.val <= l2.val) { + l1.next = mergeTwoLists(l1.next, l2); + return l1; + } else { + l2.next = mergeTwoLists(l1, l2.next); + return l2; + } +}