Skip to content

Commit

Permalink
Merge pull request #596 from wogha95/main
Browse files Browse the repository at this point in the history
[์žฌํ˜ธ] WEEK 14 Solutions
  • Loading branch information
SamTheKorean authored Nov 17, 2024
2 parents c21e238 + 087e190 commit ddcb3f3
Show file tree
Hide file tree
Showing 6 changed files with 263 additions and 0 deletions.
114 changes: 114 additions & 0 deletions binary-tree-level-order-traversal/wogha95.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
/**
* 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)
* 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;
};
44 changes: 44 additions & 0 deletions house-robber-ii/wogha95.js
Original file line number Diff line number Diff line change
@@ -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);
};
31 changes: 31 additions & 0 deletions house-robber/wogha95.js
Original file line number Diff line number Diff line change
@@ -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);
};
32 changes: 32 additions & 0 deletions lowest-common-ancestor-of-a-binary-search-tree/wogha95.js
Original file line number Diff line number Diff line change
@@ -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;
}
}
};
27 changes: 27 additions & 0 deletions non-overlapping-intervals/wogha95.js
Original file line number Diff line number Diff line change
@@ -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;
};
15 changes: 15 additions & 0 deletions reverse-bits/wogha95.js
Original file line number Diff line number Diff line change
@@ -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);
};

0 comments on commit ddcb3f3

Please sign in to comment.