Skip to content

Commit b4d306e

Browse files
authored
Merge pull request #1092 from mmyeon/main
[mallayon] Week 14
2 parents 1204757 + 971ac7d commit b4d306e

File tree

3 files changed

+149
-0
lines changed

3 files changed

+149
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
class TreeNode {
2+
val: number;
3+
left: TreeNode | null;
4+
right: TreeNode | null;
5+
constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
6+
this.val = val === undefined ? 0 : val;
7+
this.left = left === undefined ? null : left;
8+
this.right = right === undefined ? null : right;
9+
}
10+
}
11+
12+
/**
13+
*@link https://leetcode.com/problems/binary-tree-level-order-traversal/
14+
*
15+
* ์ ‘๊ทผ ๋ฐฉ๋ฒ• : DFS ์‚ฌ์šฉ
16+
* - ๊ฐ™์€ ๋†’์ด์˜ ๋…ธ๋“œ๋“ค์„ result ๋ฐฐ์—ด์— ๋„ฃ๊ธฐ ์œ„ํ•ด์„œ dfs๋กœ ์žฌ๊ท€ ํ˜ธ์ถœ
17+
* - result ๋ฐฐ์—ด์— ํ˜„์žฌ level์— ๋Œ€ํ•œ ๋ฐฐ์—ด์ด ์—†์œผ๋ฉด ์ถ”๊ฐ€ํ•˜๊ณ , ํ˜„์žฌ ๋…ธ๋“œ์˜ ๊ฐ’์„ push
18+
* - ํ•˜์œ„ ์ž์‹ ๋…ธ๋“œ๊ฐ€ ์กด์žฌํ•˜๋ฉด dfs ์žฌ๊ท€ ํ˜ธ์ถœ (level์€ 1 ์ฆ๊ฐ€)
19+
*
20+
* ์‹œ๊ฐ„๋ณต์žก๋„ : O(n)
21+
* - n = ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜, ๋ชจ๋“  ๋…ธ๋“œ ์ˆœํšŒ
22+
*
23+
* ๊ณต๊ฐ„๋ณต์žก๋„ : O(n)
24+
* - ํŠธ๋ฆฌ ๊ธฐ์šธ์–ด์ง„ ๊ฒฝ์šฐ, ์žฌ๊ท€ ํ˜ธ์ถœ n๋ฒˆ ๋งŒํผ ์Šคํƒ ์‚ฌ์šฉ
25+
*/
26+
27+
function levelOrder(root: TreeNode | null): number[][] {
28+
const result: number[][] = [];
29+
30+
const dfs = (node: TreeNode | null, level: number) => {
31+
if (!node) return;
32+
33+
if (!result[level]) result[level] = [];
34+
35+
result[level].push(node.val);
36+
37+
if (node.left) dfs(node.left, level + 1);
38+
if (node.right) dfs(node.right, level + 1);
39+
};
40+
41+
dfs(root, 0);
42+
43+
return result;
44+
}
45+
46+
/**
47+
*
48+
* ์ ‘๊ทผ ๋ฐฉ๋ฒ• : BFS ์‚ฌ์šฉ
49+
* - ๋™์ผ ๋ ˆ๋ฒจ์˜ ๋…ธ๋“œ ๊ฐ’ ๋‹ด๊ธฐ ์œ„ํ•ด์„œ ํ๋ฅผ ์‚ฌ์šฉ
50+
* - ํƒ์ƒ‰ํ•  ๋…ธ๋“œ๋ฅผ ํ์— ๋จผ์ € ๋‹ด๊ณ , ํ์—์„œ ํ•˜๋‚˜์”ฉ ๊บผ๋‚ด๋ฉด์„œ ๋™์ผ ๋ ˆ๋ฒจ์˜ ๋…ธ๋“œ ๊ฐ’ ๋‹ด๊ธฐ
51+
* - ๋…ธ๋“œ์˜ ์ž์‹๋…ธ๋“œ๊ฐ€ ์กด์žฌํ•˜๋ฉด ๋‹ค์‹œ ํ์— ์ถ”๊ฐ€ํ•ด์„œ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•จ
52+
* - ์ด ๊ณผ์ • ๋ฐ˜๋ณตํ•˜๊ธฐ
53+
*
54+
* ์‹œ๊ฐ„๋ณต์žก๋„ : O(n)
55+
* - n = ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜, ๋ชจ๋“  ๋…ธ๋“œ ์ˆœํšŒ
56+
*
57+
* ๊ณต๊ฐ„๋ณต์žก๋„ : O(n)
58+
* - ํ์— ๋ชจ๋“  ๋…ธ๋“œ ์ €์žฅํ•จ
59+
*/
60+
61+
function levelOrder(root: TreeNode | null): number[][] {
62+
if (!root) return [];
63+
64+
// ํƒ์ƒ‰ํ•  ๋…ธ๋“œ ๋‹ด์•„๋†“๋Š” ๋Œ€๊ธฐ์ค„
65+
const queue: TreeNode[] = [root];
66+
const result: number[][] = [];
67+
68+
while (queue.length > 0) {
69+
// ๋™์ผ ๋ ˆ๋ฒจ์— ์žˆ๋Š” ๋…ธ๋“œ ๊ฐ’ ๋‹ด๋Š” ์šฉ๋„
70+
const currentLevel: number[] = [];
71+
// queue ์‚ฌ์ด์ฆˆ๊ฐ€ ๋™์ ์œผ๋กœ ๋ณ€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฏธ๋ฆฌ ๊ณ„์‚ฐํ•œ ๊ฐ’ ๋ณ€์ˆ˜์— ์ €์žฅ
72+
const size = queue.length;
73+
74+
for (let i = 0; i < size; i++) {
75+
const node = queue.shift()!;
76+
currentLevel.push(node.val);
77+
78+
if (node.left) queue.push(node.left);
79+
if (node.right) queue.push(node.right);
80+
}
81+
82+
result.push(currentLevel);
83+
}
84+
85+
return result;
86+
}

โ€Žhouse-robber-ii/mmyeon.ts

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
/**
2+
*@link https://leetcode.com/problems/house-robber-ii/description/
3+
*
4+
* ์ ‘๊ทผ ๋ฐฉ๋ฒ• :
5+
* - DP๋ฅผ ํ™œ์šฉํ•ด์„œ ํ˜„์žฌ ์œ„์น˜๊นŒ์ง€์˜ ์ตœ๋Œ€๊ฐ’์„ ์—…๋ฐ์ดํŠธ
6+
* - ์›ํ˜• ๊ตฌ์กฐ๋กœ ์ฒซ ๋ฒˆ์งธ ์ง‘๊ณผ ๋งˆ์ง€๋ง‰ ์ง‘์ด ๋‘˜๋‹ค ํฌํ•จ๋  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์—, ์ฒซ ๋ฒˆ์งธ ์ง‘๋งŒ ํฌํ•จํ•˜๋Š” ๊ฒฝ์šฐ์™€ ์ฒซ ๋ฒˆ์งธ ์ง‘์„ ์ œ์™ธํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ๋‚˜๋ˆ ์„œ ๊ณ„์‚ฐํ•˜๊ณ  ์ตœ๋Œ€๊ฐ’ ๋น„๊ต
7+
*
8+
* ์‹œ๊ฐ„๋ณต์žก๋„ : O(n)
9+
* - n = numbs ๋ฐฐ์—ด์˜ ๊ธธ์ด, n๋ฒˆ ๋ฐ˜๋ณตํ•˜๋ฉด์„œ ์ตœ๋Œ€๊ฐ’ ๊ณ„์‚ฐ
10+
*
11+
* ๊ณต๊ฐ„๋ณต์žก๋„ : O(1)
12+
* - dp ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  ๊ณ ์ •๋œ ๋ฐฐ์—ด(prev, doublePrev)์„ ์‚ฌ์šฉ
13+
*/
14+
const calculateMaxMoney = (houses: number[]) => {
15+
let prev = 0;
16+
let doublePrev = 0;
17+
18+
for (let i = 0; i < houses.length; i++) {
19+
const current = Math.max(prev, doublePrev + houses[i]);
20+
21+
doublePrev = prev;
22+
prev = current;
23+
}
24+
25+
return prev;
26+
};
27+
28+
function rob(nums: number[]): number {
29+
if (nums.length === 1) return nums[0];
30+
if (nums.length === 2) return Math.max(nums[0], nums[1]);
31+
32+
const robWithFirstHouse = calculateMaxMoney(nums.slice(0, nums.length - 1));
33+
const robWithoutFirstHouse = calculateMaxMoney(nums.slice(1, nums.length));
34+
35+
return Math.max(robWithFirstHouse, robWithoutFirstHouse);
36+
}

โ€Žmeeting-rooms-ii/mmyeon.ts

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
/**
2+
* ์ ‘๊ทผ ๋ฐฉ๋ฒ• :
3+
* - ์‹œ์ž‘ ์‹œ๊ฐ„๊ณผ ์ข…๋ฃŒ ์‹œ๊ฐ„์„ ๊ฐ๊ฐ ๋ฐฐ์—ด๋กœ ๋ถ„๋ฆฌํ•œ๋‹ค์Œ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค.
4+
* - ์‹œ์ž‘ ์‹œ๊ฐ„์ด ๊ฐ€์žฅ ๋น ๋ฅธ ์ข…๋ฃŒ ์‹œ๊ฐ„๋ณด๋‹ค ๋น ๋ฅด๋‹ค๋ฉด ๋‹ค๋ฅธ ํšŒ์˜๋ฃธ ํ•„์š”ํ•˜๋‹ˆ๊นŒ ์นด์šดํŠธ ์ฆ๊ฐ€ํ•œ๋‹ค.
5+
* - ์‹œ์ž‘ ์‹œ๊ฐ„์ด ์ข…๋ฃŒ ์‹œ๊ฐ„๋ณด๋‹ค ๋А๋ฆฌ๋ฉด ํšŒ์˜๋ฃธ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋‹ˆ๊นŒ ์ข…๋ฃŒ์‹œ๊ฐ„ ์ธ๋ฑ์Šค ์ฆ๊ฐ€ํ•œ๋‹ค.
6+
*
7+
* ์‹œ๊ฐ„๋ณต์žก๋„ : O(nlogn)
8+
* - n = intervals์˜ ๊ธธ์ด, ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ
9+
*
10+
* ๊ณต๊ฐ„๋ณต์žก๋„ : O(n)
11+
* - ์ธํ„ฐ๋ฒŒ ๊ธธ์ด๋งŒํผ ๋ฐฐ์—ด ํ•„์š”
12+
*/
13+
14+
function minMeetingRooms(intervals: number[][]): number {
15+
const starts = intervals.map((interval) => interval[0]).sort((a, b) => a - b);
16+
const ends = intervals.map((interval) => interval[1]).sort((a, b) => a - b);
17+
18+
let roomCount = 0;
19+
let endIndex = 0;
20+
21+
for (let i = 0; i < starts.length; i++) {
22+
if (starts[i] < ends[endIndex]) roomCount++;
23+
else endIndex++;
24+
}
25+
26+
return roomCount;
27+
}

0 commit comments

Comments
ย (0)