Skip to content

Commit 2f110e0

Browse files
authored
Merge pull request #1115 from mmyeon/main
[mallayon] Week 15
2 parents 0dec6d1 + 2a7d9f5 commit 2f110e0

File tree

4 files changed

+154
-0
lines changed

4 files changed

+154
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
/**
2+
*
3+
* ์ ‘๊ทผ ๋ฐฉ๋ฒ• :
4+
* - ํŒฐ๋ฆฐ๋“œ๋กฌ์€ ์ขŒ์šฐ ๋Œ€์นญ ๋ฌธ์ž์—ด์„ ์ฐพ์•„์•ผ ํ•œ๋‹ค.
5+
* - ๋ฌธ์ž์—ด ์ค‘์‹ฌ์ด 1๊ฐœ(ํ™€์ˆ˜)์ผ ๋•Œ์™€ 2๊ฐœ(์ง์ˆ˜)์ผ ๋•Œ ๊ณ ๋ คํ•ด์„œ ํŒฐ๋ฆฐ๋“œ๋กฌ์„ ํ™•์žฅํ•˜๋ฉฐ ๊ธด ๋ฌธ์ž์—ด์„ ๋ฆฌํ„ดํ•œ๋‹ค.
6+
*
7+
* ์‹œ๊ฐ„๋ณต์žก๋„ : O(n^2)
8+
* - n = s ๋ฌธ์ž์—ด ๊ธธ์ด
9+
* - ๋™์ผ ๋ฌธ์ž์ธ ๊ฒฝ์šฐ for๋ฌธ๊ณผ while๋ฌธ์—์„œ 2๋ฒˆ ์ˆœํšŒ ๋ฐœ์ƒ O(n)
10+
*
11+
* ๊ณต๊ฐ„๋ณต์žก๋„ : O(1)
12+
* - ๊ณ ์ •๋œ ๋ณ€์ˆ˜๋งŒ ์‚ฌ์šฉ
13+
*
14+
*/
15+
function longestPalindrome(s: string): string {
16+
let result = "";
17+
18+
function expandFromCenter(start: number, end: number) {
19+
while (start >= 0 && end < s.length && s[start] === s[end]) {
20+
start--;
21+
end++;
22+
}
23+
return s.slice(start + 1, end);
24+
}
25+
26+
for (let i = 0; i < s.length; i++) {
27+
const oddPalindrome = expandFromCenter(i, i);
28+
if (oddPalindrome.length > result.length) result = oddPalindrome;
29+
30+
const evenPalindrome = expandFromCenter(i, i + 1);
31+
if (evenPalindrome.length > result.length) result = evenPalindrome;
32+
}
33+
34+
return result;
35+
}

โ€Žrotate-image/mmyeon.ts

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
/**
2+
Do not return anything, modify matrix in-place instead.
3+
*/
4+
5+
/**
6+
*
7+
* ์ ‘๊ทผ ๋ฐฉ๋ฒ• :
8+
* - 1. matrix ์ˆœํšŒํ•˜๋ฉด์„œ ๋Œ€๊ฐ์„  ๊ธฐ์ค€์œผ๋กœ ์œ„์ชฝ๋งŒ ํ–‰๊ณผ ์—ด ๊ฐ’ ๋ฐ”๊พผ๋‹ค.
9+
* - 2. ํ–‰ ๊ธฐ์ค€์œผ๋กœ reverseํ•œ๋‹ค.
10+
*
11+
* ์‹œ๊ฐ„๋ณต์žก๋„ : O(n^2)
12+
* - n = matrix ํ–‰, ์—ด ํฌ๊ธฐ
13+
* - matrix ์ˆœํšŒ O(n^2)
14+
*
15+
* ๊ณต๊ฐ„๋ณต์žก๋„ : O(1)
16+
* - ์ถ”๊ฐ€ ๋ฐฐ์—ด ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ
17+
*
18+
*/
19+
function rotate(matrix: number[][]): void {
20+
for (let i = 0; i < matrix.length; i++) {
21+
for (let j = i + 1; j < matrix.length; j++) {
22+
[matrix[i][j], matrix[j][i]] = [matrix[j][i], matrix[i][j]];
23+
}
24+
}
25+
26+
for (let i = 0; i < matrix.length; i++) {
27+
matrix[i].reverse();
28+
}
29+
}

โ€Žsubtree-of-another-tree/mmyeon.ts

+61
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
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+
*
14+
* ์ ‘๊ทผ ๋ฐฉ๋ฒ• :
15+
* - DFS๋กœ ๋ฃจํŠธ ๋…ธ๋“œ๋ฅผ ์ฐพ์€ ๋’ค, ํ•˜์œ„ ํŠธ๋ฆฌ๊ฐ€ ๋™์ผํ•œ ํŠธ๋ฆฌ์ธ์ง€ ํ™•์ธํ•˜๊ธฐ
16+
*
17+
* ์‹œ๊ฐ„๋ณต์žก๋„ : O(n * m)
18+
* - n = root ํŠธ๋ฆฌ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜
19+
* - m = subRoot ํŠธ๋ฆฌ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜
20+
* - ๋ฃจํŠธ ๋…ธ๋“œ ์ฐพ๊ธฐ ์œ„ํ•ด์„œ O(n)
21+
* - ๋™์ผ ํŠธ๋ฆฌ ์ฒดํฌํ•˜๊ธฐ ์œ„ํ•ด์„œ O(m)
22+
*
23+
* ๊ณต๊ฐ„๋ณต์žก๋„ : O(n + m)
24+
* - n = root ํŠธ๋ฆฌ ๋†’์ด
25+
* - m = subRoot ํŠธ๋ฆฌ ๋†’์ด
26+
* - dfs ํƒ์ƒ‰ ์ตœ๋Œ€ ๊นŠ์ด O(n)
27+
* - isSameTree ํƒ์ƒ‰ ์ตœ๋Œ€ ๊นŠ์ด O(m)
28+
*
29+
*/
30+
function isSubtree(root: TreeNode | null, subRoot: TreeNode | null): boolean {
31+
if (!root) return false;
32+
33+
const isSameTree = (
34+
node: TreeNode | null,
35+
subNode: TreeNode | null
36+
): boolean => {
37+
// ๋‘ ๋…ธ๋“œ๊ฐ€ null์ด๋ฉด ๋™์ผํ•œ ํŠธ๋ฆฌ
38+
if (!node && !subNode) return true;
39+
// ํ•œ ๋…ธ๋“œ๋งŒ null์ด๋ฉด ๋‹ค๋ฅธ ํŠธ๋ฆฌ
40+
if (!node || !subNode) return false;
41+
// ๊ฐ’์ด ๋‹ค๋ฅด๋ฉด ๋‹ค๋ฅธ ํŠธ๋ฆฌ
42+
if (node.val !== subNode.val) return false;
43+
44+
// ๊ฐ’์ด ๊ฐ™์œผ๋‹ˆ๊นŒ ์™ผ์ชฝ, ์˜ค๋ฅธ์ชฝ ํ•˜์œ„ ํŠธ๋ฆฌ๋„ ๋น„๊ต
45+
return (
46+
isSameTree(node.left, subNode.left) &&
47+
isSameTree(node.right, subNode.right)
48+
);
49+
};
50+
51+
// ๋ฃจํŠธ ๋…ธ๋“œ ์ฐพ๊ธฐ
52+
const dfs = (node: TreeNode | null): boolean => {
53+
if (!node) return false;
54+
// ๋™์ผํ•œ ํŠธ๋ฆฌ์ธ์ง€ ํ™•์ธ
55+
if (isSameTree(node, subRoot)) return true;
56+
// ์™ผ์ชฝ์ด๋‚˜ ์˜ค๋ฅธ์ชฝ ์ถ”๊ฐ€ ํƒ์ƒ‰ ์ง„ํ–‰
57+
return dfs(node.left) || dfs(node.right);
58+
};
59+
60+
return dfs(root);
61+
}
+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
/**
2+
*
3+
* ์ ‘๊ทผ ๋ฐฉ๋ฒ• :
4+
* - ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์˜ ํŠน์ง•(์™ผ์ชฝ ์ž์‹ ๋…ธ๋“œ < ๋ถ€๋ชจ ๋…ธ๋“œ < ์˜ค๋ฅธ์ชฝ ์ž์‹ ๋…ธ๋“œ)์„ ์ด์šฉํ•˜์—ฌ ๋ฌธ์ œ ํ’€๊ธฐ
5+
* - ๋ถ€๋ชจ ๋…ธ๋“œ ๊ฐ’, ์ตœ์ƒ์œ„ ๋ฃจํŠธ ๋…ธ๋“œ ๊ฐ’์„ ๋ชจ๋‘ ๊ณ ๋ คํ•ด์•ผ ํ•˜๋‹ˆ๊นŒ min, max๋กœ ๊ฐ’์˜ ๋ฒ”์œ„ ์ง€์ •ํ•˜๊ธฐ
6+
*
7+
* ์‹œ๊ฐ„๋ณต์žก๋„ : O(n)
8+
* - n = root ํŠธ๋ฆฌ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜
9+
* - ๋ชจ๋“  ๋…ธ๋“œ ํƒ์ƒ‰ : O(n)
10+
*
11+
* ๊ณต๊ฐ„๋ณต์žก๋„ : O(h)
12+
* - h = root ํŠธ๋ฆฌ ๋†’์ด
13+
* - ์žฌ๊ท€ ํ˜ธ์ถœ์ด ํŠธ๋ฆฌ ๋†’์ด๋งŒํผ ๋ฐœ์ƒํ•จ
14+
* - ์น˜์šฐ์นœ ํŠธ๋ฆฌ์˜ ๊ฒฝ์šฐ h = O(n)
15+
*
16+
*/
17+
function isValidBST(root: TreeNode | null): boolean {
18+
function helper(node: TreeNode | null, min: number, max: number): boolean {
19+
if (!node) return true;
20+
21+
if (node.val <= min || node.val >= max) return false;
22+
23+
return (
24+
helper(node.left, min, node.val) && helper(node.right, node.val, max)
25+
);
26+
}
27+
28+
return helper(root, -Infinity, Infinity);
29+
}

0 commit comments

Comments
ย (0)