Skip to content

Commit 980a8c1

Browse files
authored
Merge pull request #1102 from Yjason-K/main
[gomgom22] Week14
2 parents 0646623 + 0223ed2 commit 980a8c1

File tree

3 files changed

+120
-0
lines changed

3 files changed

+120
-0
lines changed
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
/**
2+
* ์ด์ง„ ํŠธ๋ฆฌ ๋…ธ๋“œ์˜ ์ •์˜์ž…๋‹ˆ๋‹ค.
3+
* class TreeNode {
4+
* val: number;
5+
* left: TreeNode | null;
6+
* right: TreeNode | null;
7+
* constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
8+
* this.val = (val === undefined ? 0 : val);
9+
* this.left = (left === undefined ? null : left);
10+
* this.right = (right === undefined ? null : right);
11+
* }
12+
* }
13+
*/
14+
15+
/**
16+
* ์ด์ง„ํŠธ๋ฆฌ ๊นŠ์ด๋ณ„ ๋…ธ๋“œ ๊ฐ’๋“ค์„ ๋ฐฐ์—ด๋กœ ์ €์žฅํ•˜๋Š” ํ•จ์ˆ˜.
17+
*
18+
* @param {TreeNode | null} root - ์ด์ง„ ํŠธ๋ฆฌ์˜ ๋ฃจํŠธ ๋…ธ๋“œ
19+
* @returns {number[][]} - ๊ฐ ๋ ˆ๋ฒจ๋ณ„ ๋…ธ๋“œ ๊ฐ’๋“ค์ด ๋‹ด๊ธด 2์ฐจ์› ๋ฐฐ์—ด ๋ฐ˜ํ™˜
20+
*
21+
* ์‹œ๊ฐ„ ๋ณต์žก๋„: O(n)
22+
* - ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ํ•œ ๋ฒˆ์”ฉ ๋ฐฉ๋ฌธ
23+
* ๊ณต๊ฐ„ ๋ณต์žก๋„: O(n)
24+
* - ์žฌ๊ท€ ํ˜ธ์ถœ ์Šคํƒ ๋ฐ ๊ฒฐ๊ณผ ๋ฐฐ์—ด ์‚ฌ์šฉ
25+
*/
26+
function levelOrder(root: TreeNode | null): number[][] {
27+
// idx -> ๊ฐ ๊นŠ์ด๋ณ„ ๋…ธ๋“œ ๊ฐ’๋“ค์„ ์ €์žฅ
28+
const result: number[][] = [];
29+
30+
const dfs = (node: TreeNode | null, depth: number): void => {
31+
// ๋…ธ๋“œ๊ฐ€ null์ด๋ฉด ์žฌ๊ท€ ์ข…๋ฃŒ
32+
if (node === null) return;
33+
34+
// ํ˜„์žฌ depth๋ฅผ ์ฒ˜์Œ ๋ฐฉ๋ฌธ๋˜๋Š” ๊ฒฝ์šฐ, ๊ฒฐ๊ณผ ๋ฐฐ์—ด์— ์ƒˆ๋กœ์šด depth ๋ฐฐ์—ด์„ ์ถ”๊ฐ€
35+
if (result.length === depth) {
36+
result.push([]);
37+
}
38+
39+
// ํ˜„์žฌ ๋…ธ๋“œ์˜ ๊ฐ’์„ ํ•ด๋‹น ๋ ˆ๋ฒจ ๋ฐฐ์—ด์— ์ถ”๊ฐ€
40+
result[depth].push(node.val);
41+
42+
// ์™ผ์ชฝ ์ž์‹ ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธ (depth 1 ์ฆ๊ฐ€์‹œํ‚ด)
43+
dfs(node.left, depth + 1);
44+
// ์˜ค๋ฅธ์ชฝ ์ž์‹ ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธ (depth 1 ์ฆ๊ฐ€์‹œํ‚ด)
45+
dfs(node.right, depth + 1);
46+
}
47+
48+
// depth 0๋ถ€ํ„ฐ ํƒ์ƒ‰ ์‹œ์ž‘
49+
dfs(root, 0);
50+
return result;
51+
};
52+

โ€Žcounting-bits/Yjason-K.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
/**
2+
* ๊ฐ ์ˆ˜์˜ ๋น„ํŠธ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ํ•จ์ˆ˜
3+
* @param {number} nums - ์ตœ๋Œ€ ์ˆ˜
4+
* @returns {number[]} - ๊ฐ ์ˆ˜์˜ ๋น„ํŠธ์˜ ๊ฐœ์ˆ˜ ๋ฐฐ์—ด
5+
*
6+
* ์‹œ๊ฐ„ ๋ณต์žก๋„: O(n)
7+
* - nums ๋งŒํผ ๋ฐ˜๋ณตํ•˜๋ฉฐ, ๊ฐ ์ˆ˜์˜ ๋น„ํŠธ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ณ„์‚ฐ
8+
*
9+
* ๊ณต๊ฐ„ ๋ณต์žก๋„: O(n)
10+
* - dp ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜์—ฌ O(n) ๋งŒํผ ์ถ”๊ฐ€ ๊ณต๊ฐ„์ด ํ•„์š”
11+
*/
12+
function countBits(nums: number): number[] {
13+
// dp ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•˜๊ณ , ๋ชจ๋‘ 0์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.
14+
const dp: number[] = new Array(nums + 1).fill(0);
15+
16+
// ๊ฐ ์ˆ˜์— ๋Œ€ํ•ด, ๋น„ํŠธ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.
17+
for (let num = 1; num <= nums; num++) {
18+
// num์„ 2์ง„์ˆ˜๋กœ ํ‘œํ˜„ํ–ˆ์„ ๋•Œ, 1์˜ ๊ฐœ์ˆ˜๋Š” 2์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ ํ›„,
19+
// '1'์ด ํฌํ•จ๋œ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.
20+
dp[num] = dp[Math.floor(num / 2)] + (num % 2);
21+
}
22+
23+
return dp;
24+
}
25+

โ€Žhouse-robber-ii/Yjason-K.ts

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/**
2+
* ์ฒ˜์Œ ์ง‘๊ณผ ๋ ์ง‘์€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์Œ.
3+
* ์ฃผ์–ด์ง„ ๋ฐฐ์—ด์—์„œ ์ธ์ ‘ํ•œ ์ง‘์„ ํ„ธ์ง€ ์•Š๊ณ  ํ›”์น  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ๊ธˆ์•ก์„ ๊ณ„์‚ฐํ•˜๋Š” ํ•จ์ˆ˜
4+
*
5+
* @param {number[]} nums - ๊ฐ ์ง‘์— ์žˆ๋Š” ๋ˆ์˜ ์–‘์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐฐ์—ด
6+
* @returns {number} - ๊ฒฝ๋ณด๋ฅผ ์šธ๋ฆฌ์ง€ ์•Š๊ณ  ํ›”์น  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ๊ธˆ์•ก
7+
*
8+
* ์‹œ๊ฐ„ ๋ณต์žก๋„: O(n)
9+
* - ๋ชจ๋“  ์ง‘์„ ํ•œ ๋ฒˆ์”ฉ ๋ฐฉ๋ฌธ
10+
*
11+
* ๊ณต๊ฐ„ ๋ณต์žก๋„: O(1)
12+
* - ์ƒ์ˆ˜ ๊ฐœ์˜ ๋ณ€์ˆ˜๋งŒ ์‚ฌ์šฉ
13+
*/
14+
function rob(nums: number[]): number {
15+
const houses = nums.length;
16+
17+
if (houses === 1) return nums[0];
18+
19+
const robber = (nums: number[], start: number, end: number) => {
20+
let prevMax = 0; // ๋ฐ”๋กœ ์ด์ „ ์ง‘๊นŒ์ง€ ํ„ธ์–ด์„œ ์–ป์€ ์ตœ๋Œ€ ๊ธˆ์•ก
21+
let currMax = 0; // ํ˜„์žฌ ์ง‘๊นŒ์ง€ ํ„ธ์–ด์„œ ์–ป์€ ์ตœ๋Œ€ ๊ธˆ์•ก
22+
23+
// start๋ถ€ํ„ฐ end๊นŒ์ง€ ๋ฐ˜๋ณตํ•˜๋ฉฐ DP ์ง„ํ–‰
24+
for (let i = start; i <= end; i++) {
25+
// ํ˜„์žฌ ์ง‘(i)์„ ํ„ธ ๊ฒฝ์šฐ์™€ ํ„ธ์ง€ ์•Š์„ ๊ฒฝ์šฐ์˜ ์ตœ๋Œ€ ๊ธˆ์•ก ๊ณ„์‚ฐ
26+
const temp = currMax;
27+
currMax = Math.max(currMax, prevMax + nums[i]);
28+
prevMax = temp;
29+
}
30+
31+
return currMax;
32+
}
33+
34+
35+
// ์›ํ˜• ๊ตฌ์กฐ์ด๋ฏ€๋กœ, ์ฒซ ๋ฒˆ์งธ ์ง‘์„ ํ„ธ ๊ฒฝ์šฐ์™€ ๋งˆ์ง€๋ง‰ ์ง‘์„ ํ„ธ ๊ฒฝ์šฐ๋Š” ๋™์‹œ์— ๋ถˆ๊ฐ€๋Šฅ
36+
// ๋‘ ๊ตฌ๊ฐ„์„ ๋”ฐ๋กœ ๊ณ„์‚ฐํ•˜๊ณ  ์ตœ๋Œ€๊ฐ’์„ ๋ฐ˜ํ™˜
37+
const max1 = robber(nums, 0, houses - 2); // ์ฒซ ๋ฒˆ์งธ ์ง‘๋ถ€ํ„ฐ ๋งˆ์ง€๋ง‰์—์„œ ๋‘ ๋ฒˆ์งธ ์ง‘๊นŒ์ง€ ๊ณ ๋ ค
38+
const max2 = robber(nums, 1, houses - 1); // ๋‘ ๋ฒˆ์งธ ์ง‘๋ถ€ํ„ฐ ๋งˆ์ง€๋ง‰ ์ง‘๊นŒ์ง€ ๊ณ ๋ ค
39+
40+
return Math.max(max1, max2);
41+
42+
};
43+

0 commit comments

Comments
ย (0)