From d8dfa0772040709d810d09aa35e97c21293b2e99 Mon Sep 17 00:00:00 2001 From: krokerdile Date: Sat, 17 May 2025 21:26:40 +0900 Subject: [PATCH 1/6] reverse-linked-list solution --- reverse-linked-list/krokerdile.js | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 reverse-linked-list/krokerdile.js diff --git a/reverse-linked-list/krokerdile.js b/reverse-linked-list/krokerdile.js new file mode 100644 index 000000000..ea81159bc --- /dev/null +++ b/reverse-linked-list/krokerdile.js @@ -0,0 +1,24 @@ +/** + * Definition for singly-linked list. + * function ListNode(val, next) { + * this.val = (val===undefined ? 0 : val) + * this.next = (next===undefined ? null : next) + * } + */ +/** + * @param {ListNode} head + * @return {ListNode} + */ +function reverseList(head) { + let prev = null; + let curr = head; + + while (curr !== null) { + let nextTemp = curr.next; + curr.next = prev; + prev = curr; + curr = nextTemp; + } + + return prev; // prev는 새로운 head +} \ No newline at end of file From 12d378d84f263425e4e8a3a222acfed06e2dd976 Mon Sep 17 00:00:00 2001 From: krokerdile Date: Sat, 17 May 2025 21:27:38 +0900 Subject: [PATCH 2/6] logest-substring-without-repating-characters solution --- .../krokerdile.js | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 longest-substring-without-repeating-characters/krokerdile.js diff --git a/longest-substring-without-repeating-characters/krokerdile.js b/longest-substring-without-repeating-characters/krokerdile.js new file mode 100644 index 000000000..6b9dee3dc --- /dev/null +++ b/longest-substring-without-repeating-characters/krokerdile.js @@ -0,0 +1,23 @@ +/** + * @param {string} s + * @return {number} + */ +var lengthOfLongestSubstring = function(s) { + let start = 0; + let maxLength = 0; + const seen = new Map(); // 문자 -> 마지막 인덱스 + + for (let end = 0; end < s.length; end++) { + const char = s[end]; + + // 중복 문자가 이전에 등장했으면 start를 갱신 + if (seen.has(char) && seen.get(char) >= start) { + start = seen.get(char) + 1; + } + + seen.set(char, end); // 현재 문자 위치 갱신 + maxLength = Math.max(maxLength, end - start + 1); + } + + return maxLength; +}; \ No newline at end of file From a1bbe09ea729e148cf66b87ba9e68773188bc020 Mon Sep 17 00:00:00 2001 From: krokerdile Date: Sat, 17 May 2025 21:28:14 +0900 Subject: [PATCH 3/6] number-of-islands solution --- number-of-islands/krokerdile.js | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 number-of-islands/krokerdile.js diff --git a/number-of-islands/krokerdile.js b/number-of-islands/krokerdile.js new file mode 100644 index 000000000..e69de29bb From 23103caeed9618c0c1ca3728609131db927346cb Mon Sep 17 00:00:00 2001 From: krokerdile Date: Sat, 17 May 2025 21:28:31 +0900 Subject: [PATCH 4/6] =?UTF-8?q?=EA=B0=9C=ED=96=89=EB=AC=B8=EC=9E=90=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../krokerdile.js | 2 +- number-of-islands/krokerdile.js | 23 +++++++++++++++++++ reverse-linked-list/krokerdile.js | 2 +- 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/longest-substring-without-repeating-characters/krokerdile.js b/longest-substring-without-repeating-characters/krokerdile.js index 6b9dee3dc..84ce8af21 100644 --- a/longest-substring-without-repeating-characters/krokerdile.js +++ b/longest-substring-without-repeating-characters/krokerdile.js @@ -20,4 +20,4 @@ var lengthOfLongestSubstring = function(s) { } return maxLength; -}; \ No newline at end of file +}; diff --git a/number-of-islands/krokerdile.js b/number-of-islands/krokerdile.js index e69de29bb..84ce8af21 100644 --- a/number-of-islands/krokerdile.js +++ b/number-of-islands/krokerdile.js @@ -0,0 +1,23 @@ +/** + * @param {string} s + * @return {number} + */ +var lengthOfLongestSubstring = function(s) { + let start = 0; + let maxLength = 0; + const seen = new Map(); // 문자 -> 마지막 인덱스 + + for (let end = 0; end < s.length; end++) { + const char = s[end]; + + // 중복 문자가 이전에 등장했으면 start를 갱신 + if (seen.has(char) && seen.get(char) >= start) { + start = seen.get(char) + 1; + } + + seen.set(char, end); // 현재 문자 위치 갱신 + maxLength = Math.max(maxLength, end - start + 1); + } + + return maxLength; +}; diff --git a/reverse-linked-list/krokerdile.js b/reverse-linked-list/krokerdile.js index ea81159bc..fcedfb799 100644 --- a/reverse-linked-list/krokerdile.js +++ b/reverse-linked-list/krokerdile.js @@ -21,4 +21,4 @@ function reverseList(head) { } return prev; // prev는 새로운 head -} \ No newline at end of file +} From b8ce902b60faea2311acafc929d8b0a3905d31ec Mon Sep 17 00:00:00 2001 From: krokerdile Date: Sat, 17 May 2025 21:29:15 +0900 Subject: [PATCH 5/6] unique-paths solution --- unique-paths/krokerdile.js | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 unique-paths/krokerdile.js diff --git a/unique-paths/krokerdile.js b/unique-paths/krokerdile.js new file mode 100644 index 000000000..3e73cd86d --- /dev/null +++ b/unique-paths/krokerdile.js @@ -0,0 +1,21 @@ +/** + * @param {number} m + * @param {number} n + * @return {number} + */ +var uniquePaths = function(m, n) { + const memo = {}; + + function dfs(x, y) { + if (x >= m || y >= n) return 0; + if (x === m - 1 && y === n - 1) return 1; + + const key = `${x},${y}`; + if (key in memo) return memo[key]; + + memo[key] = dfs(x + 1, y) + dfs(x, y + 1); + return memo[key]; + } + + return dfs(0, 0); +}; From 2116fb030a3171d3902089ebe84251f2445ee994 Mon Sep 17 00:00:00 2001 From: krokerdile Date: Sat, 17 May 2025 21:29:47 +0900 Subject: [PATCH 6/6] set-matrix-zeroes solution --- set-matrix-zeroes/krokerdile.js | 57 +++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 set-matrix-zeroes/krokerdile.js diff --git a/set-matrix-zeroes/krokerdile.js b/set-matrix-zeroes/krokerdile.js new file mode 100644 index 000000000..73245b1e8 --- /dev/null +++ b/set-matrix-zeroes/krokerdile.js @@ -0,0 +1,57 @@ +/** + * @param {number[][]} matrix + * @return {void} Do not return anything, modify matrix in-place instead. + */ +var setZeroes = function(matrix) { + const m = matrix.length; + const n = matrix[0].length; + + let firstRowHasZero = false; + let firstColHasZero = false; + + // 첫 행/열에 0이 있는지 확인 + for (let i = 0; i < m; i++) { + if (matrix[i][0] === 0) firstColHasZero = true; + } + for (let j = 0; j < n; j++) { + if (matrix[0][j] === 0) firstRowHasZero = true; + } + + // 마커로 0 표시 + for (let i = 1; i < m; i++) { + for (let j = 1; j < n; j++) { + if (matrix[i][j] === 0) { + matrix[i][0] = 0; // 해당 행 마킹 + matrix[0][j] = 0; // 해당 열 마킹 + } + } + } + + // 마커 기반으로 행/열 0 처리 + for (let i = 1; i < m; i++) { + if (matrix[i][0] === 0) { + for (let j = 1; j < n; j++) { + matrix[i][j] = 0; + } + } + } + for (let j = 1; j < n; j++) { + if (matrix[0][j] === 0) { + for (let i = 1; i < m; i++) { + matrix[i][j] = 0; + } + } + } + + // Step 4: 첫 행과 첫 열 처리 + if (firstRowHasZero) { + for (let j = 0; j < n; j++) { + matrix[0][j] = 0; + } + } + if (firstColHasZero) { + for (let i = 0; i < m; i++) { + matrix[i][0] = 0; + } + } +};