From a3017d102f389db2674ae81428347ffee9f45aff Mon Sep 17 00:00:00 2001 From: "lkh14011424@gmail.com" Date: Wed, 8 Apr 2026 22:24:33 +0900 Subject: [PATCH 01/12] =?UTF-8?q?=EC=8B=9C=EA=B0=84/=EA=B3=B5=EA=B0=84=20?= =?UTF-8?q?=EB=B3=B5=EC=9E=A1=EB=8F=84=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lkhoony.js | 67 +++++++++++++++++++ .../lkhoony.js | 43 ++++++++++++ graph-valid-tree/lkhoony.js | 38 +++++++++++ 3 files changed, 148 insertions(+) create mode 100644 design-add-and-search-words-data-structure/lkhoony.js create mode 100644 find-minimum-in-rotated-sorted-array/lkhoony.js create mode 100644 graph-valid-tree/lkhoony.js diff --git a/design-add-and-search-words-data-structure/lkhoony.js b/design-add-and-search-words-data-structure/lkhoony.js new file mode 100644 index 0000000000..dfd61f78fb --- /dev/null +++ b/design-add-and-search-words-data-structure/lkhoony.js @@ -0,0 +1,67 @@ +const Node = function() { + this.children = {}; + this.isEnd = false; +} + +var WordDictionary = function() { + this.root = new Node(); +}; + +/** + * @param {string} word + * @return {void} + */ +WordDictionary.prototype.addWord = function(word) { + let currentNode = this.root; + + for (let char of word) { + if (!currentNode.children[char]) { + currentNode.children[char] = new Node(); + } + currentNode = currentNode.children[char]; + } + + currentNode.isEnd = true; +}; + +/** + * @param {string} word + * @return {boolean} + */ +WordDictionary.prototype.search = function(word) { + if (word === undefined) return false; + return this._search(this.root, word, 0); +}; + +WordDictionary.prototype._search = function(node, word, index) { + if (index === word.length) { + return node.isEnd; + } + + const char = word[index]; + + if (char !== '.') { + const child = node.children[char]; + return child ? this._search(child, word, index + 1) : false; + } + + for (const key in node.children) { + if (this._search(node.children[key], word, index + 1)) { + return true; + } + } + + return false; +}; + +/** + * Your WordDictionary object will be instantiated and called as such: + * var obj = new WordDictionary() + * obj.addWord(word) + * var param_2 = obj.search(word) + */ + +// n: 단어수, m: 단어 길이 +// addWord: 시간 복잡도 O(m) +// search: 시간 복잡도 O(m) +// 공간 복잡도 O(n * m) diff --git a/find-minimum-in-rotated-sorted-array/lkhoony.js b/find-minimum-in-rotated-sorted-array/lkhoony.js new file mode 100644 index 0000000000..f55d0da4cd --- /dev/null +++ b/find-minimum-in-rotated-sorted-array/lkhoony.js @@ -0,0 +1,43 @@ +// math의 min을 이용하는 방법 +// tc: O(n^3) +// sc: 잘 몰랐는데 모든 요소를 함수 인자로 풀어 콜스택에 올린다 하여 O(n)이 된다고 함.. +// (대용량의 배열 시 maximum exceed 에러가 날 수 있음) +const findMin_use_math_min = function (nums) { + return Math.min(...nums); +}; + +// 메서드를 사용하지 않은 풀이. +// tc: O(n^3) +// sc: O(1) +const findMin_naive = function (nums) { + let min = nums[0]; + + for (let i = 1; i < nums.length; i++) { + if (nums[i] <= min) { + min = nums[i]; + break; + } + } + + return min; +}; + +// 시간복잡도를 문제의 요구사항에 맞도록 줄여본 풀이 +// tc: O(n*logn) +// sc: O(1) +const findMin = function (nums) { + let left = 0, + 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]; +}; diff --git a/graph-valid-tree/lkhoony.js b/graph-valid-tree/lkhoony.js new file mode 100644 index 0000000000..961953e02b --- /dev/null +++ b/graph-valid-tree/lkhoony.js @@ -0,0 +1,38 @@ +export class Solution { + /** + * @param {number} n - number of nodes + * @param {number[][]} edges - undirected edges + * @return {boolean} + */ + validTree(n, edges) { + if (n === 0) return true; + + // 인접 리스트 생성 + const adj = {}; + for (let i = 0; i < n; i++) { + adj[i] = []; + } + for (const [n1, n2] of edges) { + adj[n1].push(n2); + adj[n2].push(n1); + } + + const visit = new Set(); + + const dfs = (i, prev) => { + if (visit.has(i)) return false; + + visit.add(i); + + for (const j of adj[i]) { + if (j === prev) continue; + if (!dfs(j, i)) return false; + } + + return true; + }; + + return dfs(0, -1) && visit.size === n; + } + } + From b49681cc0fa760002d14e2f50f4de4fb73dbb248 Mon Sep 17 00:00:00 2001 From: "lkh14011424@gmail.com" Date: Wed, 8 Apr 2026 22:53:15 +0900 Subject: [PATCH 02/12] =?UTF-8?q?=EC=8B=9C=EA=B0=84/=EA=B3=B5=EA=B0=84=20?= =?UTF-8?q?=EB=B3=B5=EC=9E=A1=EB=8F=84=20push=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- find-minimum-in-rotated-sorted-array/lkhoony.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/find-minimum-in-rotated-sorted-array/lkhoony.js b/find-minimum-in-rotated-sorted-array/lkhoony.js index f55d0da4cd..c980d6d6c1 100644 --- a/find-minimum-in-rotated-sorted-array/lkhoony.js +++ b/find-minimum-in-rotated-sorted-array/lkhoony.js @@ -1,5 +1,5 @@ // math의 min을 이용하는 방법 -// tc: O(n^3) +// tc: O(n^4) // sc: 잘 몰랐는데 모든 요소를 함수 인자로 풀어 콜스택에 올린다 하여 O(n)이 된다고 함.. // (대용량의 배열 시 maximum exceed 에러가 날 수 있음) const findMin_use_math_min = function (nums) { From 6a86e718f9a62ca82aa8d3d6c3ce353cbba59e30 Mon Sep 17 00:00:00 2001 From: "lkh14011424@gmail.com" Date: Thu, 16 Apr 2026 23:27:37 +0900 Subject: [PATCH 03/12] =?UTF-8?q?=EC=8B=9C=EA=B0=84/=EA=B3=B5=EA=B0=84=20?= =?UTF-8?q?=EB=B3=B5=EC=9E=A1=EB=8F=84=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- find-minimum-in-rotated-sorted-array/lkhoony.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/find-minimum-in-rotated-sorted-array/lkhoony.js b/find-minimum-in-rotated-sorted-array/lkhoony.js index c980d6d6c1..5c64e3a9b8 100644 --- a/find-minimum-in-rotated-sorted-array/lkhoony.js +++ b/find-minimum-in-rotated-sorted-array/lkhoony.js @@ -7,7 +7,7 @@ const findMin_use_math_min = function (nums) { }; // 메서드를 사용하지 않은 풀이. -// tc: O(n^3) +// tc: O(n^2) // sc: O(1) const findMin_naive = function (nums) { let min = nums[0]; From 545d5eb8b71528d3e10984d7890f889e74823547 Mon Sep 17 00:00:00 2001 From: "lkh14011424@gmail.com" Date: Fri, 17 Apr 2026 22:04:40 +0900 Subject: [PATCH 04/12] =?UTF-8?q?4/17=20=EC=8B=9C=EA=B0=84=20=EA=B3=B5?= =?UTF-8?q?=EA=B0=84=20=EB=B3=B5=EC=9E=A1=EB=8F=84=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- find-minimum-in-rotated-sorted-array/lkhoony.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/find-minimum-in-rotated-sorted-array/lkhoony.js b/find-minimum-in-rotated-sorted-array/lkhoony.js index 5c64e3a9b8..e58506a8f9 100644 --- a/find-minimum-in-rotated-sorted-array/lkhoony.js +++ b/find-minimum-in-rotated-sorted-array/lkhoony.js @@ -23,7 +23,7 @@ const findMin_naive = function (nums) { }; // 시간복잡도를 문제의 요구사항에 맞도록 줄여본 풀이 -// tc: O(n*logn) +// tc: O(n^2*logn) // sc: O(1) const findMin = function (nums) { let left = 0, From 85775d85a495f68b277b3b4e85e435204f93661a Mon Sep 17 00:00:00 2001 From: "lkh14011424@gmail.com" Date: Fri, 17 Apr 2026 22:10:46 +0900 Subject: [PATCH 05/12] =?UTF-8?q?4/17=20=EC=8B=9C=EA=B0=84=20=EA=B3=B5?= =?UTF-8?q?=EA=B0=84=20=EB=B3=B5=EC=9E=A1=EB=8F=84=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=202?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- find-minimum-in-rotated-sorted-array/lkhoony.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/find-minimum-in-rotated-sorted-array/lkhoony.js b/find-minimum-in-rotated-sorted-array/lkhoony.js index e58506a8f9..fadf37fe1d 100644 --- a/find-minimum-in-rotated-sorted-array/lkhoony.js +++ b/find-minimum-in-rotated-sorted-array/lkhoony.js @@ -7,7 +7,7 @@ const findMin_use_math_min = function (nums) { }; // 메서드를 사용하지 않은 풀이. -// tc: O(n^2) +// tc: O(n^3) // sc: O(1) const findMin_naive = function (nums) { let min = nums[0]; From b65124b7fd37c3f25b95b2295aacb5081eef5182 Mon Sep 17 00:00:00 2001 From: "lkh14011424@gmail.com" Date: Fri, 17 Apr 2026 22:48:19 +0900 Subject: [PATCH 06/12] =?UTF-8?q?4/17=20=EC=8B=9C=EA=B0=84=20=EA=B3=B5?= =?UTF-8?q?=EA=B0=84=20=EB=B3=B5=EC=9E=A1=EB=8F=84=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=204?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- find-minimum-in-rotated-sorted-array/lkhoony.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/find-minimum-in-rotated-sorted-array/lkhoony.js b/find-minimum-in-rotated-sorted-array/lkhoony.js index fadf37fe1d..e58506a8f9 100644 --- a/find-minimum-in-rotated-sorted-array/lkhoony.js +++ b/find-minimum-in-rotated-sorted-array/lkhoony.js @@ -7,7 +7,7 @@ const findMin_use_math_min = function (nums) { }; // 메서드를 사용하지 않은 풀이. -// tc: O(n^3) +// tc: O(n^2) // sc: O(1) const findMin_naive = function (nums) { let min = nums[0]; From e90637e19a58a3ca605fb4a2f63b15e982f430f9 Mon Sep 17 00:00:00 2001 From: "lkh14011424@gmail.com" Date: Fri, 17 Apr 2026 22:52:28 +0900 Subject: [PATCH 07/12] =?UTF-8?q?4/17=20=EC=8B=9C=EA=B0=84=20=EA=B3=B5?= =?UTF-8?q?=EA=B0=84=20=EB=B3=B5=EC=9E=A1=EB=8F=84=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=206?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- find-minimum-in-rotated-sorted-array/lkhoony.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/find-minimum-in-rotated-sorted-array/lkhoony.js b/find-minimum-in-rotated-sorted-array/lkhoony.js index e58506a8f9..1d7ee2cfa1 100644 --- a/find-minimum-in-rotated-sorted-array/lkhoony.js +++ b/find-minimum-in-rotated-sorted-array/lkhoony.js @@ -7,7 +7,7 @@ const findMin_use_math_min = function (nums) { }; // 메서드를 사용하지 않은 풀이. -// tc: O(n^2) +// tc: O(n^4) // sc: O(1) const findMin_naive = function (nums) { let min = nums[0]; From ab0e84fd9c8a3cc2e9c22c8bc22da3e15142321b Mon Sep 17 00:00:00 2001 From: "lkh14011424@gmail.com" Date: Fri, 17 Apr 2026 22:59:31 +0900 Subject: [PATCH 08/12] =?UTF-8?q?4/17=20=EC=8B=9C=EA=B0=84=20=EA=B3=B5?= =?UTF-8?q?=EA=B0=84=20=EB=B3=B5=EC=9E=A1=EB=8F=84=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=207?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- find-minimum-in-rotated-sorted-array/lkhoony.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/find-minimum-in-rotated-sorted-array/lkhoony.js b/find-minimum-in-rotated-sorted-array/lkhoony.js index 1d7ee2cfa1..e58506a8f9 100644 --- a/find-minimum-in-rotated-sorted-array/lkhoony.js +++ b/find-minimum-in-rotated-sorted-array/lkhoony.js @@ -7,7 +7,7 @@ const findMin_use_math_min = function (nums) { }; // 메서드를 사용하지 않은 풀이. -// tc: O(n^4) +// tc: O(n^2) // sc: O(1) const findMin_naive = function (nums) { let min = nums[0]; From 542016d50878d0202d594605462b1cb411ddb0e4 Mon Sep 17 00:00:00 2001 From: "lkh14011424@gmail.com" Date: Fri, 17 Apr 2026 23:12:25 +0900 Subject: [PATCH 09/12] =?UTF-8?q?4/17=20=EC=8B=9C=EA=B0=84=20=EA=B3=B5?= =?UTF-8?q?=EA=B0=84=20=EB=B3=B5=EC=9E=A1=EB=8F=84=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=208?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- find-minimum-in-rotated-sorted-array/lkhoony.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/find-minimum-in-rotated-sorted-array/lkhoony.js b/find-minimum-in-rotated-sorted-array/lkhoony.js index e58506a8f9..1d7ee2cfa1 100644 --- a/find-minimum-in-rotated-sorted-array/lkhoony.js +++ b/find-minimum-in-rotated-sorted-array/lkhoony.js @@ -7,7 +7,7 @@ const findMin_use_math_min = function (nums) { }; // 메서드를 사용하지 않은 풀이. -// tc: O(n^2) +// tc: O(n^4) // sc: O(1) const findMin_naive = function (nums) { let min = nums[0]; From 2d709eb1fdd859822e74ba0e75a25bcacf5d8dbd Mon Sep 17 00:00:00 2001 From: "lkh14011424@gmail.com" Date: Fri, 17 Apr 2026 23:37:47 +0900 Subject: [PATCH 10/12] =?UTF-8?q?4/17=20=EC=8B=9C=EA=B0=84=20=EA=B3=B5?= =?UTF-8?q?=EA=B0=84=20=EB=B3=B5=EC=9E=A1=EB=8F=84=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=209?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- find-minimum-in-rotated-sorted-array/lkhoony.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/find-minimum-in-rotated-sorted-array/lkhoony.js b/find-minimum-in-rotated-sorted-array/lkhoony.js index 1d7ee2cfa1..fadf37fe1d 100644 --- a/find-minimum-in-rotated-sorted-array/lkhoony.js +++ b/find-minimum-in-rotated-sorted-array/lkhoony.js @@ -7,7 +7,7 @@ const findMin_use_math_min = function (nums) { }; // 메서드를 사용하지 않은 풀이. -// tc: O(n^4) +// tc: O(n^3) // sc: O(1) const findMin_naive = function (nums) { let min = nums[0]; From 667dfa166d7902b0c4d2a4b8e4261c4250635237 Mon Sep 17 00:00:00 2001 From: "lkh14011424@gmail.com" Date: Fri, 17 Apr 2026 23:41:42 +0900 Subject: [PATCH 11/12] =?UTF-8?q?4/17=20=EC=8B=9C=EA=B0=84=20=EA=B3=B5?= =?UTF-8?q?=EA=B0=84=20=EB=B3=B5=EC=9E=A1=EB=8F=84=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=2010?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- find-minimum-in-rotated-sorted-array/lkhoony.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/find-minimum-in-rotated-sorted-array/lkhoony.js b/find-minimum-in-rotated-sorted-array/lkhoony.js index fadf37fe1d..b8717d2842 100644 --- a/find-minimum-in-rotated-sorted-array/lkhoony.js +++ b/find-minimum-in-rotated-sorted-array/lkhoony.js @@ -7,7 +7,7 @@ const findMin_use_math_min = function (nums) { }; // 메서드를 사용하지 않은 풀이. -// tc: O(n^3) +// tc: O(n^5) // sc: O(1) const findMin_naive = function (nums) { let min = nums[0]; From 21abc9a491b94a46b0ad98e680b3211a27ea70ff Mon Sep 17 00:00:00 2001 From: "lkh14011424@gmail.com" Date: Fri, 17 Apr 2026 23:59:50 +0900 Subject: [PATCH 12/12] =?UTF-8?q?4/17=20=EC=8B=9C=EA=B0=84=20=EA=B3=B5?= =?UTF-8?q?=EA=B0=84=20=EB=B3=B5=EC=9E=A1=EB=8F=84=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=2011?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- find-minimum-in-rotated-sorted-array/lkhoony.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/find-minimum-in-rotated-sorted-array/lkhoony.js b/find-minimum-in-rotated-sorted-array/lkhoony.js index b8717d2842..650a6fa6e0 100644 --- a/find-minimum-in-rotated-sorted-array/lkhoony.js +++ b/find-minimum-in-rotated-sorted-array/lkhoony.js @@ -7,7 +7,7 @@ const findMin_use_math_min = function (nums) { }; // 메서드를 사용하지 않은 풀이. -// tc: O(n^5) +// tc: O(n^6) // sc: O(1) const findMin_naive = function (nums) { let min = nums[0];