Skip to content

Commit ddcb3f3

Browse files
authored
Merge pull request #596 from wogha95/main
[์žฌํ˜ธ] WEEK 14 Solutions
2 parents c21e238 + 087e190 commit ddcb3f3

File tree

6 files changed

+263
-0
lines changed

6 files changed

+263
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
/**
2+
* 2์ฐจ
3+
* ๊ฐ level์˜ node ์ˆ˜๋งŒํผ ๋Š์–ด์„œ ์ˆœํšŒํ•˜๊ธฐ
4+
*
5+
* TC: O(N)
6+
* SC: O(N)
7+
* N: total of nodes
8+
*/
9+
10+
/**
11+
* Definition for a binary tree node.
12+
* function TreeNode(val, left, right) {
13+
* this.val = (val===undefined ? 0 : val)
14+
* this.left = (left===undefined ? null : left)
15+
* this.right = (right===undefined ? null : right)
16+
* }
17+
*/
18+
/**
19+
* @param {TreeNode} root
20+
* @return {number[][]}
21+
*/
22+
var levelOrder = function (root) {
23+
if (!root) {
24+
return [];
25+
}
26+
27+
const result = [];
28+
const queue = [root];
29+
30+
while (queue.length > 0) {
31+
const level = queue.length;
32+
const currentLevelValList = [];
33+
34+
for (let i = 0; i < level; i++) {
35+
const current = queue.shift();
36+
37+
currentLevelValList.push(current.val);
38+
39+
if (current.left) {
40+
queue.push(current.left);
41+
}
42+
43+
if (current.right) {
44+
queue.push(current.right);
45+
}
46+
}
47+
48+
result.push(currentLevelValList);
49+
}
50+
51+
return result;
52+
};
53+
54+
/**
55+
* 1์ฐจ
56+
* level๊ณผ ๋…ธ๋“œ๋ฅผ queue์— ์ถ”๊ฐ€ํ•ด์„œ ์ •๋‹ต๋งŒ๋“ค๊ธฐ
57+
*
58+
* TC: O(N)
59+
* SC: O(N)
60+
* N: total of nodes
61+
*/
62+
63+
/**
64+
* Definition for a binary tree node.
65+
* function TreeNode(val, left, right) {
66+
* this.val = (val===undefined ? 0 : val)
67+
* this.left = (left===undefined ? null : left)
68+
* this.right = (right===undefined ? null : right)
69+
* }
70+
*/
71+
/**
72+
* @param {TreeNode} root
73+
* @return {number[][]}
74+
*/
75+
var levelOrder = function (root) {
76+
const result = [];
77+
78+
const queue = [
79+
{
80+
level: 0,
81+
current: root,
82+
},
83+
];
84+
85+
while (queue.length > 0) {
86+
const { level, current } = queue.shift();
87+
88+
if (!current) {
89+
continue;
90+
}
91+
92+
if (result[level]) {
93+
result[level].push(current.val);
94+
} else {
95+
result[level] = [current.val];
96+
}
97+
98+
if (current.left) {
99+
queue.push({
100+
level: level + 1,
101+
current: current.left,
102+
});
103+
}
104+
105+
if (current.right) {
106+
queue.push({
107+
level: level + 1,
108+
current: current.right,
109+
});
110+
}
111+
}
112+
113+
return result;
114+
};

โ€Žhouse-robber-ii/wogha95.js

+44
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
/**
2+
* TC: O(N)
3+
* SC; O(1)
4+
*/
5+
6+
/**
7+
* @param {number[]} nums
8+
* @return {number}
9+
*/
10+
var rob = function (nums) {
11+
if (nums.length < 4) {
12+
return Math.max(...nums);
13+
}
14+
15+
let prevprevprev = nums[0];
16+
let prevprev = nums[1];
17+
let prev = nums[0] + nums[2];
18+
19+
for (let index = 3; index < nums.length - 1; index++) {
20+
const current = Math.max(prevprevprev, prevprev) + nums[index];
21+
22+
prevprevprev = prevprev;
23+
prevprev = prev;
24+
prev = current;
25+
}
26+
27+
const resultWithoutLast = Math.max(prevprevprev, prevprev, prev);
28+
29+
prevprevprev = nums[1];
30+
prevprev = nums[2];
31+
prev = nums[1] + nums[3];
32+
33+
for (let index = 4; index < nums.length; index++) {
34+
const current = Math.max(prevprevprev, prevprev) + nums[index];
35+
36+
prevprevprev = prevprev;
37+
prevprev = prev;
38+
prev = current;
39+
}
40+
41+
const resultWithoutFirst = Math.max(prevprevprev, prevprev, prev);
42+
43+
return Math.max(resultWithoutLast, resultWithoutFirst);
44+
};

โ€Žhouse-robber/wogha95.js

+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
/**
2+
* dp[n] = n์œ„์น˜์˜ ์ง‘์„ ํ›”์นœ๋‹ค๋Š” ๊ฐ€์ •ํ•˜์— n์œ„์น˜์˜ ์ง‘๊นŒ์ง€ ์ตœ๋Œ€๋กœ ํ›”์นœ ๊ธˆ์•ก
3+
* dp[n] = Math.max(dp[n - 3], dp[n - 2]) + nums[index]
4+
*
5+
* TC: O(N)
6+
* SC: O(1)
7+
*/
8+
9+
/**
10+
* @param {number[]} nums
11+
* @return {number}
12+
*/
13+
var rob = function (nums) {
14+
if (nums.length < 3) {
15+
return Math.max(...nums);
16+
}
17+
18+
let prevprevprev = nums[0];
19+
let prevprev = nums[1];
20+
let prev = nums[0] + nums[2];
21+
22+
for (let index = 3; index < nums.length; index++) {
23+
const current = Math.max(prevprevprev, prevprev) + nums[index];
24+
25+
prevprevprev = prevprev;
26+
prevprev = prev;
27+
prev = current;
28+
}
29+
30+
return Math.max(prevprevprev, prevprev, prev);
31+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
/**
2+
* TC: O(logN)
3+
* left์™€ right ์ค‘ ํ•œ ๊ณณ์œผ๋กœ๋งŒ ํƒ์ƒ‰
4+
*
5+
* SC: O(1)
6+
*/
7+
8+
/**
9+
* Definition for a binary tree node.
10+
* function TreeNode(val) {
11+
* this.val = val;
12+
* this.left = this.right = null;
13+
* }
14+
*/
15+
16+
/**
17+
* @param {TreeNode} root
18+
* @param {TreeNode} p
19+
* @param {TreeNode} q
20+
* @return {TreeNode}
21+
*/
22+
var lowestCommonAncestor = function (root, p, q) {
23+
while (root) {
24+
if (root.val > p.val && root.val > q.val) {
25+
root = root.left;
26+
} else if (root.val < p.val && root.val < q.val) {
27+
root = root.right;
28+
} else {
29+
return root;
30+
}
31+
}
32+
};
+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
/**
2+
* TC: O(N * logN)
3+
* ์ •๋ ฌ๋กœ ์ธํ•œ ์‹œ๊ฐ„๋ณต์žก๋„
4+
*
5+
* SC: O(1)
6+
*/
7+
8+
/**
9+
* @param {number[][]} intervals
10+
* @return {number}
11+
*/
12+
var eraseOverlapIntervals = function (intervals) {
13+
intervals.sort((a, b) => a[1] - b[1]);
14+
15+
let count = 0;
16+
let lastEnd = Number.MIN_SAFE_INTEGER;
17+
18+
for (const [start, end] of intervals) {
19+
if (start < lastEnd) {
20+
count += 1;
21+
} else {
22+
lastEnd = end;
23+
}
24+
}
25+
26+
return count;
27+
};

โ€Žreverse-bits/wogha95.js

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
/**
2+
* TC: O(1)
3+
* n ์ˆซ์ž๋ฅผ 32์ž๋ฆฌ 2์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ๋ฐฐ์—ด๋กœ ๋ณ€๊ฒฝํ–ˆ์„๋•Œ ์ตœ๋Œ€ ๊ธธ์ด๊ฐ€ 32์ด๋ฏ€๋กœ ์ƒ์ˆ˜ ๋ณต์žก๋„๋ฅผ ๊ฐ–๋Š”๋‹ค.
4+
*
5+
* SC: O(1)
6+
*/
7+
8+
/**
9+
* @param {number} n - a positive integer
10+
* @return {number} - a positive integer
11+
*/
12+
var reverseBits = function (n) {
13+
const result = n.toString(2).padStart(32, "0").split("").reverse().join("");
14+
return parseInt(result, 2);
15+
};

0 commit comments

Comments
ย (0)