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/17] =?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/17] =?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/17] =?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/17] =?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/17] =?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/17] =?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/17] =?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/17] =?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/17] =?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/17] =?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/17] =?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/17] =?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]; From b9d821624a614217a02d331a2c162b0cfc2424f3 Mon Sep 17 00:00:00 2001 From: "lkh14011424@gmail.com" Date: Thu, 23 Apr 2026 22:40:13 +0900 Subject: [PATCH 13/17] =?UTF-8?q?4/23=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=EC=A0=95=ED=99=95?= =?UTF-8?q?=EB=8F=84=20=ED=85=8C=EC=8A=A4=ED=8A=B8=201?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- design-add-and-search-words-data-structure/lkhoony.js | 2 +- find-minimum-in-rotated-sorted-array/lkhoony.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/design-add-and-search-words-data-structure/lkhoony.js b/design-add-and-search-words-data-structure/lkhoony.js index dfd61f78fb..416130fb55 100644 --- a/design-add-and-search-words-data-structure/lkhoony.js +++ b/design-add-and-search-words-data-structure/lkhoony.js @@ -63,5 +63,5 @@ WordDictionary.prototype._search = function(node, word, index) { // n: 단어수, m: 단어 길이 // addWord: 시간 복잡도 O(m) -// search: 시간 복잡도 O(m) +// search: 시간 복잡도 O(m^2) // 공간 복잡도 O(n * m) diff --git a/find-minimum-in-rotated-sorted-array/lkhoony.js b/find-minimum-in-rotated-sorted-array/lkhoony.js index 650a6fa6e0..3e52f752c0 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^6) +// tc: O(n^7) // sc: O(1) const findMin_naive = function (nums) { let min = nums[0]; From 87b6fc6e7f616a32545711f07486c054f66af556 Mon Sep 17 00:00:00 2001 From: "lkh14011424@gmail.com" Date: Thu, 23 Apr 2026 23:13:09 +0900 Subject: [PATCH 14/17] =?UTF-8?q?4/23=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=EC=A0=95=ED=99=95?= =?UTF-8?q?=EB=8F=84=20=ED=85=8C=EC=8A=A4=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 3e52f752c0..eb8404d5ca 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^7) +// tc: O(n^8) // sc: O(1) const findMin_naive = function (nums) { let min = nums[0]; From 44a17b4dff08a785cbaa05211a1a06e28c4f7783 Mon Sep 17 00:00:00 2001 From: "lkh14011424@gmail.com" Date: Fri, 1 May 2026 11:45:10 +0900 Subject: [PATCH 15/17] =?UTF-8?q?5/1=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=EC=A0=95=ED=99=95?= =?UTF-8?q?=EB=8F=84=20=ED=85=8C=EC=8A=A4=ED=8A=B81?= 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 eb8404d5ca..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^8) +// tc: O(n^3) // sc: O(1) const findMin_naive = function (nums) { let min = nums[0]; From 36555b1893031e84070432d01cf6bdcfd72b0f22 Mon Sep 17 00:00:00 2001 From: "lkh14011424@gmail.com" Date: Fri, 1 May 2026 12:53:54 +0900 Subject: [PATCH 16/17] =?UTF-8?q?5/1=20=ED=8C=A8=ED=84=B4=20=ED=83=9C?= =?UTF-8?q?=EA=B7=B8=20=EB=B3=91=ED=95=A9=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?1?= 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..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^3) +// tc: O(n^6) // sc: O(1) const findMin_naive = function (nums) { let min = nums[0]; From cda9cd313554fdec89778d85777bc2b842ddedf7 Mon Sep 17 00:00:00 2001 From: "lkh14011424@gmail.com" Date: Fri, 1 May 2026 13:00:25 +0900 Subject: [PATCH 17/17] =?UTF-8?q?5/1=20=ED=8C=A8=ED=84=B4=20=ED=83=9C?= =?UTF-8?q?=EA=B7=B8=20=EB=B3=91=ED=95=A9=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- linked-list-cycle/lkhoony.ts | 32 +++++++++++ pacific-atlantic-water-flow/lkhoony.ts | 79 ++++++++++++++++++++++++++ reverse-bits/lkhoony.rs | 12 ++++ 3 files changed, 123 insertions(+) create mode 100644 linked-list-cycle/lkhoony.ts create mode 100644 pacific-atlantic-water-flow/lkhoony.ts create mode 100644 reverse-bits/lkhoony.rs diff --git a/linked-list-cycle/lkhoony.ts b/linked-list-cycle/lkhoony.ts new file mode 100644 index 0000000000..25f7d257a4 --- /dev/null +++ b/linked-list-cycle/lkhoony.ts @@ -0,0 +1,32 @@ +/** + * 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) + * } + * } + */ + +/* +리스트 노드를 저장하는 Map을 생성, 노드를 탐색하며 해당 Map에 노드를 저장하고 이미 있는 노드일 경우 true 리턴 + +시간복잡도 : O(N) - N은 리스트의 개수 +공간복잡도 : O(N) - Map 객체 +*/ + +function hasCycle(head: ListNode | null): boolean { + const nodeMap = new Map() + + while (head) { + if (nodeMap.get(head) === true) { + return true + } + nodeMap.set(head, true) + head = head.next + } + + return false +} \ No newline at end of file diff --git a/pacific-atlantic-water-flow/lkhoony.ts b/pacific-atlantic-water-flow/lkhoony.ts new file mode 100644 index 0000000000..cf4164afce --- /dev/null +++ b/pacific-atlantic-water-flow/lkhoony.ts @@ -0,0 +1,79 @@ +/** +pacific에 닿을 수 있는 grid를 판별하는 이중 배열과 atlantic에 닿을 수 있는지를 판별하는 이중 배열을 생성한다. +pacific 배열은 r, c 중 하나라도 0일 경우 true값, +atlantic 배열은 r, c 중 하나라도 length값과 같을 경우 true값을 채운다 + +이후 r, c 탐색을 돌며 pacific/ atlantic true인 값이 있으면 dfs를 돌린다 + - 이전 heights값보다 크거나 같으면 true 처리, 인접한 셀을 또 dfs 탐색 + +두 배열값이 둘 다 true인 위치들을 리턴한다 + +시간복잡도 : O(M*N) - 순회 + */ + +function pacificAtlantic(heights: number[][]): number[][] { + const m = heights.length + const n = heights[0].length + const result = [] + const pacificChecker = Array.from({ length: m }).map((el, idx) => { + if (idx === 0) { + return new Array(n).fill(true) + } else { + const arr = new Array(n).fill(false) + arr[0] = true + return arr + } + }) + const atlanticChecker = Array.from({ length: m }).map((el, idx) => { + if (idx === m - 1) { + return new Array(n).fill(true) + } else { + const arr = new Array(n).fill(false) + arr[n - 1] = true + return arr + } + }) + + const dx = [0, 1, -1, 0] + const dy = [1, 0, 0, -1] + + const search = (row, col, checker, stdValue) => { + const value = heights[row][col] + if (value < stdValue) return + + checker[row][col] = true + + for (let i = 0; i < 4; i++) { + const newRow = row + dx[i] + const newCol = col + dy[i] + if (newRow < 0 || newRow >= m) continue + if (newCol < 0 || newCol >= n) continue + if (checker[newRow][newCol]) continue + + search(newRow, newCol, checker, value) + } + } + + // dfs 탐색 + for (let i = 0; i < m; i++) { + for (let j = 0; j < n; j++) { + if (pacificChecker[i][j]) { + search(i, j, pacificChecker, heights[i][j]) + } + if (atlanticChecker[i][j]) { + search(i, j, atlanticChecker, heights[i][j]) + } + } + } + + for (let i = 0; i < m; i++) { + for (let j = 0; j < n; j++) { + if (pacificChecker[i][j] && atlanticChecker[i][j]) { + result.push([i, j]) + } + } + } + + //pacific, atlantic 모두 true인 인덱스배열 반환 + return result +} \ No newline at end of file diff --git a/reverse-bits/lkhoony.rs b/reverse-bits/lkhoony.rs new file mode 100644 index 0000000000..980a980105 --- /dev/null +++ b/reverse-bits/lkhoony.rs @@ -0,0 +1,12 @@ +// TC: O(1) +// SC: O(1) +impl Solution { + pub fn reverse_bits(n: u32) -> u32 { + let mut res: u32 = 0; + for i in 0..32 { + let bit = (n >> i) & 1; + res += bit << (31 - i); + } + res + } +} \ No newline at end of file