From b5c94f952e4db27aaf7c8232d604edfe67819c22 Mon Sep 17 00:00:00 2001 From: bhan Date: Mon, 7 Apr 2025 00:58:57 -0700 Subject: [PATCH 1/5] valid anagram solution --- valid-anagram/byol-han.js | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 valid-anagram/byol-han.js diff --git a/valid-anagram/byol-han.js b/valid-anagram/byol-han.js new file mode 100644 index 000000000..92ba33171 --- /dev/null +++ b/valid-anagram/byol-han.js @@ -0,0 +1,20 @@ +/** + * @param {string} s + * @param {string} t + * @return {boolean} + */ +var isAnagram = function (s, t) { + if (s.length !== t.length) return false; + + // 문자열 t를 배열로 변환해서 문자 제거할 수 있게 함 + let tArr = t.split(""); + + for (let i = 0; i < s.length; i++) { + let index = tArr.indexOf(s[i]); // s[i]가 tArr에 있는지 확인 + if (index === -1) { + return false; + } + tArr.splice(index, 1); + } + return true; +}; From 7e9affbd62007035a72db897a5a69b90270e6d76 Mon Sep 17 00:00:00 2001 From: bhan Date: Tue, 8 Apr 2025 22:54:52 -0700 Subject: [PATCH 2/5] climbing stairs solution --- climbing-stairs/byol-han.js | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 climbing-stairs/byol-han.js diff --git a/climbing-stairs/byol-han.js b/climbing-stairs/byol-han.js new file mode 100644 index 000000000..8447bdab6 --- /dev/null +++ b/climbing-stairs/byol-han.js @@ -0,0 +1,17 @@ +/** + * @param {number} n + * @return {number} + */ +var climbStairs = function (n) { + if (n <= 2) return n; + + let first = 1; + let second = 2; + + for (let i = 3; i <= n; i++) { + let count = first + second; + first = second; + second = count; + } + return second; +}; From 6945bd0e85d80b68170949b78819eeff65c5c9d3 Mon Sep 17 00:00:00 2001 From: bhan Date: Wed, 9 Apr 2025 01:47:39 -0700 Subject: [PATCH 3/5] product of array except self solution --- product-of-array-except-self/byol-han.js | 41 ++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 product-of-array-except-self/byol-han.js diff --git a/product-of-array-except-self/byol-han.js b/product-of-array-except-self/byol-han.js new file mode 100644 index 000000000..f0eded493 --- /dev/null +++ b/product-of-array-except-self/byol-han.js @@ -0,0 +1,41 @@ +/** + * @param {number[]} nums + * @return {number[]} + */ +var productExceptSelf = function (nums) { + // 1. + // 각 인덱스에서 자기 자신 제외한 배열 만든 뒤 곱셈 수행 → 시간복잡도 O(n²) + // (중첩 루프로 인해 시간복잡도 O(n²), 큰 입력에서는 시간 초과 발생) + let result = []; + for (let i = 0; i < nums.length; i++) { + const productNums = [...nums.slice(0, i), ...nums.slice(i + 1)]; + + let product = 1; + for (let j = 0; j < productNums.length; j++) { + product *= productNums[j]; + } + result.push(product); + } + return result; + + // 2. + const n = nums.length; + // 정답 배열을 1로 초기화 (곱셈에 영향을 주지 않도록) + const answer = new Array(n).fill(1); + + // 왼쪽 누적 곱 계산 + let left = 1; + for (let i = 0; i < n; i++) { + answer[i] = left; + left *= nums[i]; + } + + // 오른쪽 누적 곱 계산 + let right = 1; + for (let i = n - 1; i >= 0; i--) { + answer[i] *= right; + right *= nums[i]; + } + + return answer; +}; From 2c24c86435017afdcbf47685516c9032680b1142 Mon Sep 17 00:00:00 2001 From: bhan Date: Thu, 10 Apr 2025 02:52:01 -0700 Subject: [PATCH 4/5] 3sum solution --- 3sum/byol-han.js | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 3sum/byol-han.js diff --git a/3sum/byol-han.js b/3sum/byol-han.js new file mode 100644 index 000000000..7f216ecae --- /dev/null +++ b/3sum/byol-han.js @@ -0,0 +1,36 @@ +/** + * @param {number[]} nums + * @return {number[][]} + */ +var threeSum = function (nums) { + // 오름차순 정렬 + nums.sort((a, b) => a - b); + const result = []; + + for (let i = 0; i < nums.length - 2; i++) { + // 중복된 숫자는 스킵 + if (i > 0 && nums[i] === nums[i - 1]) continue; + + let left = i + 1; + let right = nums.length - 1; + + while (left < right) { + const sum = nums[i] + nums[left] + nums[right]; + + if (sum < 0) { + left++; + } else if (sum > 0) { + right--; + } else { + result.push([nums[i], nums[left], nums[right]]); + // 중복된 left,right 값 스킵 + while (left < right && nums[left] === nums[left + 1]) left++; + while (left < right && nums[right] === nums[right - 1]) right--; + + left++; + right--; + } + } + } + return result; +}; From b84cb9245e090bdcfbe26e34cadb325ec751261e Mon Sep 17 00:00:00 2001 From: bhan Date: Fri, 11 Apr 2025 02:30:55 -0700 Subject: [PATCH 5/5] validate binary search tree solution --- validate-binary-search-tree/byol-han.js | 38 +++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 validate-binary-search-tree/byol-han.js diff --git a/validate-binary-search-tree/byol-han.js b/validate-binary-search-tree/byol-han.js new file mode 100644 index 000000000..4a8e1da9e --- /dev/null +++ b/validate-binary-search-tree/byol-han.js @@ -0,0 +1,38 @@ +/** + * 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 {boolean} + */ +var isValidBST = function (root) { + function helper(node, lower = -Infinity, upper = Infinity) { + if (!node) return true; + + const val = node.val; + + // 현재 노드가 범위를 벗어나면 false + if (val <= lower || val >= upper) { + return false; + } + + // 오른쪽 서브트리: 최소값은 현재 노드 값 + if (!helper(node.right, val, upper)) { + return false; + } + + // 왼쪽 서브트리: 최대값은 현재 노드 값 + if (!helper(node.left, lower, val)) { + return false; + } + + return true; + } + + return helper(root); +};