From 5dcc0f790a3fac80784c560f9b46febb01c01b10 Mon Sep 17 00:00:00 2001 From: wogha95 Date: Thu, 14 Nov 2024 18:29:56 +0900 Subject: [PATCH 1/7] solve: house robber --- house-robber/wogha95.js | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 house-robber/wogha95.js diff --git a/house-robber/wogha95.js b/house-robber/wogha95.js new file mode 100644 index 000000000..5b9ca4aae --- /dev/null +++ b/house-robber/wogha95.js @@ -0,0 +1,31 @@ +/** + * dp[n] = n위치의 집을 훔친다는 가정하에 n위치의 집까지 최대로 훔친 금액 + * dp[n] = Math.max(dp[n - 3], dp[n - 2]) + nums[index] + * + * TC: O(N) + * SC: O(1) + */ + +/** + * @param {number[]} nums + * @return {number} + */ +var rob = function (nums) { + if (nums.length < 3) { + return Math.max(...nums); + } + + let prevprevprev = nums[0]; + let prevprev = nums[1]; + let prev = nums[0] + nums[2]; + + for (let index = 3; index < nums.length; index++) { + const current = Math.max(prevprevprev, prevprev) + nums[index]; + + prevprevprev = prevprev; + prevprev = prev; + prev = current; + } + + return Math.max(prevprevprev, prevprev, prev); +}; From e354f1d0614fc5f609579ccb4d104e022f75eb3e Mon Sep 17 00:00:00 2001 From: wogha95 Date: Thu, 14 Nov 2024 18:30:26 +0900 Subject: [PATCH 2/7] solve: lowest common ancestor of a binary search tree --- .../wogha95.js | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 lowest-common-ancestor-of-a-binary-search-tree/wogha95.js diff --git a/lowest-common-ancestor-of-a-binary-search-tree/wogha95.js b/lowest-common-ancestor-of-a-binary-search-tree/wogha95.js new file mode 100644 index 000000000..a26bf822c --- /dev/null +++ b/lowest-common-ancestor-of-a-binary-search-tree/wogha95.js @@ -0,0 +1,32 @@ +/** + * TC: O(logN) + * left와 right 중 한 곳으로만 탐색 + * + * SC: O(1) + */ + +/** + * Definition for a binary tree node. + * function TreeNode(val) { + * this.val = val; + * this.left = this.right = null; + * } + */ + +/** + * @param {TreeNode} root + * @param {TreeNode} p + * @param {TreeNode} q + * @return {TreeNode} + */ +var lowestCommonAncestor = function (root, p, q) { + while (root) { + if (root.val > p.val && root.val > q.val) { + root = root.left; + } else if (root.val < p.val && root.val < q.val) { + root = root.right; + } else { + return root; + } + } +}; From 0c2d28bee93a87b77d836bd0ed920183b21475b6 Mon Sep 17 00:00:00 2001 From: wogha95 Date: Thu, 14 Nov 2024 18:30:40 +0900 Subject: [PATCH 3/7] solve: non overlapping intervals --- non-overlapping-intervals/wogha95.js | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 non-overlapping-intervals/wogha95.js diff --git a/non-overlapping-intervals/wogha95.js b/non-overlapping-intervals/wogha95.js new file mode 100644 index 000000000..bd320ec8e --- /dev/null +++ b/non-overlapping-intervals/wogha95.js @@ -0,0 +1,27 @@ +/** + * TC: O(N * logN) + * 정렬로 인한 시간복잡도 + * + * SC: O(1) + */ + +/** + * @param {number[][]} intervals + * @return {number} + */ +var eraseOverlapIntervals = function (intervals) { + intervals.sort((a, b) => a[1] - b[1]); + + let count = 0; + let lastEnd = Number.MIN_SAFE_INTEGER; + + for (const [start, end] of intervals) { + if (start < lastEnd) { + count += 1; + } else { + lastEnd = end; + } + } + + return count; +}; From 22f172eefa21a5e3fd7ea2c7cbf1af9075f2a120 Mon Sep 17 00:00:00 2001 From: wogha95 Date: Thu, 14 Nov 2024 18:34:59 +0900 Subject: [PATCH 4/7] solve: reverse bits --- reverse-bits/wogha95.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 reverse-bits/wogha95.js diff --git a/reverse-bits/wogha95.js b/reverse-bits/wogha95.js new file mode 100644 index 000000000..6cef44d80 --- /dev/null +++ b/reverse-bits/wogha95.js @@ -0,0 +1,15 @@ +/** + * TC: O(1) + * n 숫자를 32자리 2진수로 변환하고 배열로 변경했을때 최대 길이가 32이므로 상수 복잡도를 갖는다. + * + * SC: O(1) + */ + +/** + * @param {number} n - a positive integer + * @return {number} - a positive integer + */ +var reverseBits = function (n) { + const result = n.toString(2).padStart(32, "0").split("").reverse().join(""); + return parseInt(result, 2); +}; From a43dd47739dcefcb225708a6ea8d6bd8ea53a217 Mon Sep 17 00:00:00 2001 From: wogha95 Date: Fri, 15 Nov 2024 11:48:45 +0900 Subject: [PATCH 5/7] solve: binary tree level order traversal --- binary-tree-level-order-traversal/wogha95.js | 60 ++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 binary-tree-level-order-traversal/wogha95.js diff --git a/binary-tree-level-order-traversal/wogha95.js b/binary-tree-level-order-traversal/wogha95.js new file mode 100644 index 000000000..eed267dee --- /dev/null +++ b/binary-tree-level-order-traversal/wogha95.js @@ -0,0 +1,60 @@ +/** + * 1차 + * + * TC: O(N) + * SC: O(N) + * N: total of nodes + */ + +/** + * 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[][]} + */ +var levelOrder = function (root) { + const result = []; + + const queue = [ + { + level: 0, + current: root, + }, + ]; + + while (queue.length > 0) { + const { level, current } = queue.shift(); + + if (!current) { + continue; + } + + if (result[level]) { + result[level].push(current.val); + } else { + result[level] = [current.val]; + } + + if (current.left) { + queue.push({ + level: level + 1, + current: current.left, + }); + } + + if (current.right) { + queue.push({ + level: level + 1, + current: current.right, + }); + } + } + + return result; +}; From ecc65dd4597b861653f3726b2e76338025d64dd8 Mon Sep 17 00:00:00 2001 From: wogha95 Date: Fri, 15 Nov 2024 11:59:40 +0900 Subject: [PATCH 6/7] solve: binary tree level order traversal --- binary-tree-level-order-traversal/wogha95.js | 54 ++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/binary-tree-level-order-traversal/wogha95.js b/binary-tree-level-order-traversal/wogha95.js index eed267dee..1fdd5f0be 100644 --- a/binary-tree-level-order-traversal/wogha95.js +++ b/binary-tree-level-order-traversal/wogha95.js @@ -1,5 +1,59 @@ +/** + * 2차 + * 각 level의 node 수만큼 끊어서 순회하기 + * + * TC: O(N) + * SC: O(N) + * N: total of nodes + */ + +/** + * 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[][]} + */ +var levelOrder = function (root) { + if (!root) { + return []; + } + + const result = []; + const queue = [root]; + + while (queue.length > 0) { + const level = queue.length; + const currentLevelValList = []; + + for (let i = 0; i < level; i++) { + const current = queue.shift(); + + currentLevelValList.push(current.val); + + if (current.left) { + queue.push(current.left); + } + + if (current.right) { + queue.push(current.right); + } + } + + result.push(currentLevelValList); + } + + return result; +}; + /** * 1차 + * level과 노드를 queue에 추가해서 정답만들기 * * TC: O(N) * SC: O(N) From 087e190dec9782998c9a548bd2eb877bf273c323 Mon Sep 17 00:00:00 2001 From: wogha95 Date: Fri, 15 Nov 2024 12:41:54 +0900 Subject: [PATCH 7/7] solve: house robber ii --- house-robber-ii/wogha95.js | 44 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 house-robber-ii/wogha95.js diff --git a/house-robber-ii/wogha95.js b/house-robber-ii/wogha95.js new file mode 100644 index 000000000..1d90119e8 --- /dev/null +++ b/house-robber-ii/wogha95.js @@ -0,0 +1,44 @@ +/** + * TC: O(N) + * SC; O(1) + */ + +/** + * @param {number[]} nums + * @return {number} + */ +var rob = function (nums) { + if (nums.length < 4) { + return Math.max(...nums); + } + + let prevprevprev = nums[0]; + let prevprev = nums[1]; + let prev = nums[0] + nums[2]; + + for (let index = 3; index < nums.length - 1; index++) { + const current = Math.max(prevprevprev, prevprev) + nums[index]; + + prevprevprev = prevprev; + prevprev = prev; + prev = current; + } + + const resultWithoutLast = Math.max(prevprevprev, prevprev, prev); + + prevprevprev = nums[1]; + prevprev = nums[2]; + prev = nums[1] + nums[3]; + + for (let index = 4; index < nums.length; index++) { + const current = Math.max(prevprevprev, prevprev) + nums[index]; + + prevprevprev = prevprev; + prevprev = prev; + prev = current; + } + + const resultWithoutFirst = Math.max(prevprevprev, prevprev, prev); + + return Math.max(resultWithoutLast, resultWithoutFirst); +};