From 1ab1e6f85bc3d831bcc998cb7e49795bfaee68be Mon Sep 17 00:00:00 2001 From: seongmin36 Date: Tue, 14 Jul 2026 02:08:59 +0900 Subject: [PATCH 1/5] merge two sorted lists solution --- merge-two-sorted-lists/seongmin36.js | 45 ++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 merge-two-sorted-lists/seongmin36.js diff --git a/merge-two-sorted-lists/seongmin36.js b/merge-two-sorted-lists/seongmin36.js new file mode 100644 index 0000000000..23376925a3 --- /dev/null +++ b/merge-two-sorted-lists/seongmin36.js @@ -0,0 +1,45 @@ +/** +ListNode는 파라미터로 current value와 next value를 지닌다. +배열 메서드도 사용할 수 없다. + +나는 원초적인 방법으로 해결해보았다. +result 배열에 모든 수를 다 넣고, sort()하는 것이다. +여기서 중요한 점은 '어떻게 배열 → ListNode로 변경하느냐'이다. +[1, 2, 3] 배열을 1 → 2 → 3 리스트 노드를 만들기 위해서는 컴퓨터 구조상 역방향인 3부터 가져와야한다. +이때 사용한 메서드는 'reduceRight()'다. +reduceRight() 메서드는 reduce() 작업순서의 역방향이다. + +TC : O(nLogN) → sort() +SC : O(n) + */ +/** + * Definition for singly-linked list. + * function ListNode(val, next) { + * this.val = (val===undefined ? 0 : val) + * this.next = (next===undefined ? null : next) + * } + */ +/** + * @param {ListNode} list1 + * @param {ListNode} list2 + * @return {ListNode} + */ +function mergeTwoLists(list1, list2) { + let result = []; + let node1 = list1; + let node2 = list2; + + while (node1 !== null) { + result.push(node1.val); + node1 = node1.next; + } + + while (node2 !== null) { + result.push(node2.val); + node2 = node2.next; + } + + return result + .sort((a, b) => a - b) + .reduceRight((next, val) => new ListNode(val, next), null); +} From e9387655d671ce180c5be0fece375f13680a64b8 Mon Sep 17 00:00:00 2001 From: seongmin36 Date: Thu, 16 Jul 2026 12:28:51 +0900 Subject: [PATCH 2/5] maximum depth of binary tree solution --- maximum-depth-of-binary-tree/seongmin36.js | 27 ++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 maximum-depth-of-binary-tree/seongmin36.js diff --git a/maximum-depth-of-binary-tree/seongmin36.js b/maximum-depth-of-binary-tree/seongmin36.js new file mode 100644 index 0000000000..e7113e9a9a --- /dev/null +++ b/maximum-depth-of-binary-tree/seongmin36.js @@ -0,0 +1,27 @@ +/** +이 문제를 푸는 핵심은 DFS(깊이 우선 탐색)다. +왼쪽으로, 오른쪽으로 쭉 들어가는 값을 반환해서 변수에 저장한다. +이를 재귀호출하면 쉽게 해결할 수 있다. + */ +/** + * 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 {number} + */ +function maxDepth(root) { + if (root === null) return 0; + + let left_depth = maxDepth(root.left); + let right_depth = maxDepth(root.right); + + let count = Math.max(left_depth, right_depth) + 1; + + return count; +} From 64e4ddcc01bffd22c74c733cdfe145a61999d407 Mon Sep 17 00:00:00 2001 From: seongmin36 Date: Sat, 18 Jul 2026 03:27:18 +0900 Subject: [PATCH 3/5] find minimum in rotated sorted array solution --- .../seongmin36.js | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 find-minimum-in-rotated-sorted-array/seongmin36.js diff --git a/find-minimum-in-rotated-sorted-array/seongmin36.js b/find-minimum-in-rotated-sorted-array/seongmin36.js new file mode 100644 index 0000000000..bb67aaa5b6 --- /dev/null +++ b/find-minimum-in-rotated-sorted-array/seongmin36.js @@ -0,0 +1,26 @@ +/** +이진탐색을 이용한 풀이 + +TC: O(log n) +SC: O(1) + */ +/** + * @param {number[]} nums + * @return {number} + */ +function findMin(nums) { + let left = 0; + let right = nums.length - 1; + + while (left < right) { + let mid = Math.floor((left + right) / 2); + + if (nums[mid] > nums[right]) { + left = mid + 1; + } else { + right = mid; + } + } + + return nums[left]; +} From 869ca89ef9a3f3dadf71616197df04078634d930 Mon Sep 17 00:00:00 2001 From: seongmin36 Date: Sat, 18 Jul 2026 04:43:23 +0900 Subject: [PATCH 4/5] fix tc: O(n), sc: O(1) --- merge-two-sorted-lists/seongmin36.js | 43 ++++++++++++---------------- 1 file changed, 18 insertions(+), 25 deletions(-) diff --git a/merge-two-sorted-lists/seongmin36.js b/merge-two-sorted-lists/seongmin36.js index 23376925a3..22abc657ec 100644 --- a/merge-two-sorted-lists/seongmin36.js +++ b/merge-two-sorted-lists/seongmin36.js @@ -1,16 +1,10 @@ /** -ListNode는 파라미터로 current value와 next value를 지닌다. -배열 메서드도 사용할 수 없다. +list1, list2는 시작 노드 객체 +핵심은 '가위바위보 기찻길 룰' +cur.next가 list1, list2 비교 결과를 배치해주는 역할 -나는 원초적인 방법으로 해결해보았다. -result 배열에 모든 수를 다 넣고, sort()하는 것이다. -여기서 중요한 점은 '어떻게 배열 → ListNode로 변경하느냐'이다. -[1, 2, 3] 배열을 1 → 2 → 3 리스트 노드를 만들기 위해서는 컴퓨터 구조상 역방향인 3부터 가져와야한다. -이때 사용한 메서드는 'reduceRight()'다. -reduceRight() 메서드는 reduce() 작업순서의 역방향이다. - -TC : O(nLogN) → sort() -SC : O(n) +TC : O(n) +SC : O(1) */ /** * Definition for singly-linked list. @@ -25,21 +19,20 @@ SC : O(n) * @return {ListNode} */ function mergeTwoLists(list1, list2) { - let result = []; - let node1 = list1; - let node2 = list2; - - while (node1 !== null) { - result.push(node1.val); - node1 = node1.next; - } + let dummy = new ListNode(); + let cur = dummy; - while (node2 !== null) { - result.push(node2.val); - node2 = node2.next; + while (list1 && list2) { + if (list1.val > list2.val) { + cur.next = list2; + list2 = list2.next; + } else { + cur.next = list1; + list1 = list1.next; + } + cur = cur.next; } + cur.next = list1 || list2; // 남아있는 원소 붙이기 - return result - .sort((a, b) => a - b) - .reduceRight((next, val) => new ListNode(val, next), null); + return dummy.next; } From 642fbb1bb2d3cb080d88333fcd3ea6967526be3c Mon Sep 17 00:00:00 2001 From: seongmin36 Date: Sat, 18 Jul 2026 23:36:45 +0900 Subject: [PATCH 5/5] address code review feedback --- find-minimum-in-rotated-sorted-array/seongmin36.js | 4 ++++ maximum-depth-of-binary-tree/seongmin36.js | 4 +--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/find-minimum-in-rotated-sorted-array/seongmin36.js b/find-minimum-in-rotated-sorted-array/seongmin36.js index bb67aaa5b6..16682acbbd 100644 --- a/find-minimum-in-rotated-sorted-array/seongmin36.js +++ b/find-minimum-in-rotated-sorted-array/seongmin36.js @@ -12,9 +12,13 @@ function findMin(nums) { let left = 0; let right = nums.length - 1; + if (nums[left] <= nums[right]) return nums[left]; // 일자 배열인 경우 + while (left < right) { let mid = Math.floor((left + right) / 2); + if (nums[mid] > nums[mid + 1]) return nums[mid + 1]; // mid의 바로 옆에서 초기화되는 경우 + if (nums[mid] > nums[right]) { left = mid + 1; } else { diff --git a/maximum-depth-of-binary-tree/seongmin36.js b/maximum-depth-of-binary-tree/seongmin36.js index e7113e9a9a..021c7ef090 100644 --- a/maximum-depth-of-binary-tree/seongmin36.js +++ b/maximum-depth-of-binary-tree/seongmin36.js @@ -21,7 +21,5 @@ function maxDepth(root) { let left_depth = maxDepth(root.left); let right_depth = maxDepth(root.right); - let count = Math.max(left_depth, right_depth) + 1; - - return count; + return Math.max(left_depth, right_depth) + 1; }