Skip to content

Commit 31643b5

Browse files
authored
Merge pull request #1615 from uraflower/main
[uraflower] Week 13 Solutions
2 parents ce944e1 + 499d198 commit 31643b5

File tree

5 files changed

+183
-0
lines changed

5 files changed

+183
-0
lines changed
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
// ๋ฐฐ์—ด + ์ด๋ถ„ ํƒ์ƒ‰ ์‚ฝ์ž… (์ •๋ ฌ) ๋กœ ํ’€์ดํ•จ
2+
3+
// ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ๋Š” ๋“€์–ผ ํž™์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ ์žˆ์Œ (์„ฑ๋Šฅ ๋ฉด์—์„œ ๋” ์šฐ์ˆ˜ํ•จ)
4+
// ์ตœ์†Œํž™, ์ตœ๋Œ€ํž™ ๋‘ ๊ฐœ๋ฅผ ๋‘๊ณ  ๋‚˜๋ˆ ์„œ add ์ด ๋•Œ size ์ฐจ์ด๋Š” 1 ์ดํ•˜์—ฌ์•ผ ํ•จ
5+
// ex. 1 2 3 4 5 6 => ์ตœ๋Œ€ ํž™์— 1 2 3, ์ตœ์†Œ ํž™์— 4 5 6 => (3 + 4) / 2
6+
// ex. 2 3 4 => ์ตœ๋Œ€ ํž™์— 2 3, ์ตœ์†Œ ํž™์— 4 => 3
7+
// ์ฐธ๊ณ ๋กœ leetcode์—์„œ JS๋ฅผ ์œ„ํ•œ MaxPriorityQueue์™€ ๊ฐ™์€ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋“ฏ ํ•œ๋ฐ...
8+
// ๋ฉ”์„œ๋“œ๋ฅผ ์–ด๋””์„œ ๋ณผ ์ˆ˜ ์žˆ๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์Œ
9+
10+
class MedianFinder {
11+
constructor() {
12+
this.nums = [];
13+
}
14+
15+
/**
16+
* ์‹œ๊ฐ„๋ณต์žก๋„: O(n) (์ด๋ถ„ํƒ์ƒ‰: log n, splice: n)
17+
* ๊ณต๊ฐ„๋ณต์žก๋„: O(1)
18+
* @param {number} num
19+
* @return {void}
20+
*/
21+
addNum(num) {
22+
const i = this.#findInsertPosition(num);
23+
this.nums.splice(i, 0, num);
24+
}
25+
26+
/**
27+
* ์ด์ง„ ํƒ์ƒ‰์œผ๋กœ ์‚ฝ์ž… ์ง€์  ์ฐพ๋Š” ํ•จ์ˆ˜
28+
* ์‹œ๊ฐ„๋ณต์žก๋„: O(log n)
29+
* ๊ณต๊ฐ„๋ณต์žก๋„: O(1)
30+
*/
31+
#findInsertPosition(num) {
32+
let left = 0;
33+
let right = this.nums.length;
34+
35+
while (left <= right) {
36+
const mid = Math.floor((left + right) / 2);
37+
38+
if (num < this.nums[mid]) {
39+
right = mid - 1;
40+
} else if (this.nums[mid] < num) {
41+
left = mid + 1;
42+
} else {
43+
return mid;
44+
}
45+
}
46+
47+
return left;
48+
}
49+
50+
/**
51+
* ์‹œ๊ฐ„๋ณต์žก๋„: O(1)
52+
* ๊ณต๊ฐ„๋ณต์žก๋„: O(1)
53+
* @return {number}
54+
*/
55+
findMedian() {
56+
const len = this.nums.length;
57+
const midIndex = Math.floor(len / 2);
58+
59+
if (len % 2 === 0) {
60+
return (this.nums[midIndex - 1] + this.nums[midIndex]) / 2;
61+
} else {
62+
return this.nums[midIndex];
63+
}
64+
}
65+
};
66+
67+
/**
68+
* Your MedianFinder object will be instantiated and called as such:
69+
* var obj = new MedianFinder()
70+
* obj.addNum(num)
71+
* var param_2 = obj.findMedian()
72+
*/

โ€Žinsert-interval/uraflower.js

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
/**
2+
* @param {number[][]} intervals
3+
* @param {number[]} newInterval
4+
* @return {number[][]}
5+
*/
6+
const insert = function(intervals, newInterval) {
7+
const merged = [];
8+
let i = 0;
9+
10+
// ๊ฒน์น˜์ง€ ์•Š๋Š” ์•ž๋ถ€๋ถ„ push
11+
while (i < intervals.length && intervals[i][1] < newInterval[0]) {
12+
merged.push(intervals[i]);
13+
i++;
14+
}
15+
16+
// ๊ฒน์น˜๋Š” ๋ถ€๋ถ„ ์ฒ˜๋ฆฌ
17+
while (i < intervals.length && intervals[i][0] <= newInterval[1]) {
18+
newInterval[0] = Math.min(newInterval[0], intervals[i][0]);
19+
newInterval[1] = Math.max(newInterval[1], intervals[i][1]);
20+
i++;
21+
}
22+
merged.push(newInterval);
23+
24+
// ๊ฒน์น˜์ง€ ์•Š๋Š” ๋’ท๋ถ€๋ถ„ push
25+
while (i < intervals.length) {
26+
merged.push(intervals[i]);
27+
i++;
28+
}
29+
30+
return merged;
31+
};
32+
33+
// ์‹œ๊ฐ„๋ณต์žก๋„: O(n)
34+
// ๊ณต๊ฐ„๋ณต์žก๋„: O(n) (๋ฐ˜ํ™˜ํ•  ๋ฐฐ์—ด)
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* function TreeNode(val, left, right) {
4+
* this.val = (val===undefined ? 0 : val)
5+
* this.left = (left===undefined ? null : left)
6+
* this.right = (right===undefined ? null : right)
7+
* }
8+
*/
9+
/**
10+
* @param {TreeNode} root
11+
* @param {number} k
12+
* @return {number}
13+
*/
14+
const kthSmallest = function (root, k) {
15+
const sorted = [];
16+
17+
const traverse = function (root) {
18+
if (!root) return;
19+
traverse(root.left);
20+
sorted.push(root.val);
21+
traverse(root.right);
22+
}
23+
24+
traverse(root);
25+
return sorted[k - 1];
26+
};
27+
28+
// ์‹œ๊ฐ„๋ณต์žก๋„: O(n)
29+
// ๊ณต๊ฐ„๋ณต์žก๋„: O(n) (๋ฐฐ์—ด)
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* function TreeNode(val) {
4+
* this.val = val;
5+
* this.left = this.right = null;
6+
* }
7+
*/
8+
9+
/**
10+
* @param {TreeNode} root
11+
* @param {TreeNode} p
12+
* @param {TreeNode} q
13+
* @return {TreeNode}
14+
*/
15+
const lowestCommonAncestor = function (root, p, q) {
16+
// ์ด์ง„ํƒ์ƒ‰ํŠธ๋ฆฌ(BST)์˜ ํŠน์ง•์„ ํ™œ์šฉํ•˜์—ฌ
17+
// p, q์˜ ๊ฐ’๊ณผ root ๊ฐ’์„ ๋น„๊ตํ•ด p, q๊ฐ€ ์†ํ•œ ํŠธ๋ฆฌ(left/right)๋ฅผ ํŒ๋‹จ
18+
if (p.val < root.val && q.val < root.val) {
19+
return lowestCommonAncestor(root.left, p, q);
20+
} else if (p.val > root.val && q.val > root.val) {
21+
return lowestCommonAncestor(root.right, p, q);
22+
} else {
23+
return root;
24+
}
25+
};
26+
27+
// ์‹œ๊ฐ„๋ณต์žก๋„: O(h) (h: ํŠธ๋ฆฌ์˜ ๋†’์ด, ์ฆ‰ ์žฌ๊ท€ ์Šคํƒ ๊นŠ์ด)
28+
// ๊ณต๊ฐ„๋ณต์žก๋„: O(h) (h: ํŠธ๋ฆฌ์˜ ๋†’์ด, ์ฆ‰ ์žฌ๊ท€ ์Šคํƒ ๊นŠ์ด)

โ€Žmeeting-rooms/uraflower.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
/**
2+
* @param intervals: an array of meeting time intervals
3+
* @return: if a person could attend all meetings
4+
*/
5+
const canAttendMeetings = function (intervals) {
6+
intervals.sort((a, b ) => a[0] - b[0]); // ์‹œ์ž‘ ์‹œ๊ฐ„ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ
7+
8+
let prevEnd = intervals[0][1];
9+
for (const [start, end] of intervals) {
10+
if (start < prevEnd) {
11+
return false;
12+
}
13+
prevEnd = end;
14+
}
15+
16+
return true;
17+
}
18+
19+
// ์‹œ๊ฐ„๋ณต์žก๋„: O(n * log n)
20+
// ๊ณต๊ฐ„๋ณต์žก๋„: O(1)

0 commit comments

Comments
ย (0)