Skip to content

Commit 2326b0c

Browse files
authored
Merge pull request #2249 from Blossssom/main
[Blossssom] WEEK 08 solutions
2 parents 02e620d + 9cb3af2 commit 2326b0c

4 files changed

Lines changed: 176 additions & 0 deletions

File tree

โ€Žclone-graph/Blossssom.tsโ€Ž

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
class _Node {
2+
val: number;
3+
neighbors: _Node[];
4+
5+
constructor(val?: number, neighbors?: _Node[]) {
6+
this.val = val === undefined ? 0 : val;
7+
this.neighbors = neighbors === undefined ? [] : neighbors;
8+
}
9+
}
10+
11+
// ๊ฒฐ๊ตญ ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค์–ด ์ฐธ์กฐ๊ฐ€ ๋Š๊ธด ์™„์ „ํ•œ ๋‚จ๋‚จ์˜ ๊ทธ๋ž˜ํ”„๋ฅผ ์ƒ์„ฑ
12+
13+
function cloneGraph(node: _Node | null): _Node | null {
14+
if (!node) {
15+
return null;
16+
}
17+
18+
const visited = new Map<_Node, _Node>();
19+
20+
visited.set(node, new _Node(node.val));
21+
22+
const queue: _Node[] = [node];
23+
24+
while (queue.length > 0) {
25+
const currentNode = queue.shift()!;
26+
27+
for (const n of currentNode?.neighbors) {
28+
if (!visited.has(n)) {
29+
visited.set(n, new _Node(n.val));
30+
queue.push(n);
31+
}
32+
33+
visited.get(currentNode)!.neighbors.push(visited.get(n)!);
34+
}
35+
}
36+
37+
return null;
38+
}
39+
40+
// function cloneGraph(node: _Node | null): _Node | null {
41+
// if (!node) {
42+
// return null;
43+
// }
44+
45+
// const checkMap = new Map<number, _Node>();
46+
47+
// function dfs(targetNode: _Node) {
48+
// if (checkMap.has(targetNode.val)) {
49+
// return checkMap.get(targetNode.val)!;
50+
// }
51+
52+
// const newNode = new _Node(targetNode.val);
53+
// checkMap.set(targetNode.val, newNode);
54+
55+
// for (const n of targetNode.neighbors) {
56+
// newNode.neighbors.push(dfs(n));
57+
// }
58+
59+
// return newNode;
60+
// }
61+
62+
// const result = dfs(node);
63+
64+
// return result;
65+
// }
66+
67+
const node1 = new _Node(1);
68+
const node2 = new _Node(2);
69+
const node3 = new _Node(3);
70+
const node4 = new _Node(4);
71+
72+
node1.neighbors = [node2, node4];
73+
node2.neighbors = [node1, node3];
74+
node3.neighbors = [node2, node4];
75+
node4.neighbors = [node1, node3];
76+
77+
cloneGraph(node1);
78+
79+
80+
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
/**
2+
* @param s - ๋Œ€๋ฌธ์ž ์•ŒํŒŒ๋ฒณ ๋ฌธ์ž์—ด
3+
* @param k - ๋ฌธ์ž์—ด์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋Š” ํšŸ์ˆ˜
4+
* @returns - ๋™์ผ ๋ฌธ์ž๋ฅผ ํฌํ•จํ•œ ๊ฐ€์žฅ ๊ธด ๋ฌธ์ž์—ด์˜ ๊ธธ์ด
5+
*/
6+
function characterReplacement(s: string, k: number): number {
7+
const countMap = new Map<string, number>();
8+
9+
let left = 0;
10+
let maxRepeatCount = 0;
11+
let maxLength = 0;
12+
13+
for (let right = 0; right < s.length; right++) {
14+
const char = s[right];
15+
16+
// ๋ฌธ์ž ์นด์šดํŠธ ๋ˆ„์ 
17+
countMap.set(char, (countMap.get(char) || 0) + 1);
18+
19+
maxRepeatCount = Math.max(maxRepeatCount, countMap.get(char)!);
20+
21+
// (ํ˜„์žฌ ์œˆ๋„์šฐ ๊ธธ์ด - ์ตœ๋Œ€ ๋นˆ๋„์ˆ˜) ๊ฐ€ k ๋ณด๋‹ค ํฌ๋ฉด ์œˆ๋„์šฐ ์ถ•์†Œ => left ์ฆ๊ฐ€
22+
while (right - left + 1 - maxRepeatCount > k) {
23+
const leftChar = s[left];
24+
countMap.set(leftChar, countMap.get(leftChar)! - 1);
25+
left++;
26+
}
27+
28+
// ์œ ํšจํ•œ ์œˆ๋„์šฐ ์ค‘ ์ตœ๋Œ€ ๊ธธ์ด
29+
maxLength = Math.max(maxLength, right - left + 1);
30+
}
31+
32+
return maxLength;
33+
}
34+
35+
const s = "ABAB";
36+
const k = 2;
37+
characterReplacement(s, k);
38+
39+
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
/**
2+
* @param s - ๋ฌธ์ž์—ด
3+
* @returns - ํšŒ๋ฌธ (๋’ค์ง‘์–ด ์ฝ์–ด๋„ ๊ฐ™์€ ๋ฌธ์ž์—ด) ์˜ ๊ฐฏ์ˆ˜ ๋ฐ˜ํ™˜
4+
* @description
5+
* - ๊ฐ™์€ ๊ธ€์ž์—ฌ๋„ ๊ฐ๊ฐ์€ ๋”ฐ๋กœ ํŒ๋‹จํ•˜๋ฉฐ ํ•œ ๊ธ€์ž๋„ ํšŒ๋ฌธ์œผ๋กœ ํŒ๋‹จ
6+
*/
7+
8+
function countSubstrings(s: string): number {
9+
let n = s.length;
10+
let cnt = 0;
11+
const dp: boolean[][] = Array.from({ length: n }, () => Array(n).fill(false));
12+
13+
for (let j = 0; j < s.length; j++) {
14+
for (let i = 0; i <= j; i++) {
15+
if (s[i] === s[j] && (j - i <= 2 || dp[i + 1][j - 1])) {
16+
dp[i][j] = true;
17+
cnt++;
18+
}
19+
}
20+
}
21+
return cnt;
22+
}
23+
24+
const s = "aaa";
25+
countSubstrings(s);
26+
27+

โ€Žreverse-bits/Blossssom.tsโ€Ž

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/**
2+
* @param n - 32๋น„ํŠธ ์ •์ˆ˜ ๋ถ€ํ˜ธ
3+
* @returns - ๋น„ํŠธ๋ฅผ ๋’ค์ง‘์€ ์ •์ˆ˜ ๋ถ€ํ˜ธ
4+
* @description
5+
* - ํ’€์ด 1. ๋‹จ์ˆœํ•˜๊ฒŒ ๋ณ€ํ™˜, 0 ์ฑ„์šฐ๊ธฐ, ๋’ค์ง‘๊ธฐ ํ›„ 10์ง„์ˆ˜๋กœ ์žฌ๋ณ€ํ™˜
6+
*/
7+
// function reverseBits(n: number): number {
8+
// const bits = n.toString(2).padStart(32, "0").split("").reverse().join("");
9+
10+
// return parseInt(bits, 2);
11+
// }
12+
13+
function reverseBits(n: number): number {
14+
let result = 0;
15+
for (let i = 0; i < 32; i++) {
16+
// result๋ฅผ ์™ผ์ชฝ์œผ๋กœ 1์นธ ๋ฐ€์–ด ๊ณต๊ฐ„์ƒ์„ฑ, n์˜ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ๋น„ํŠธ๊ฐ€ 1์ธ์ง€ ํŒ๋‹จํ•ด result์— ํ• ๋‹น
17+
result = (result << 1) | (n & 1);
18+
19+
// ํŒ๋‹จ์ด ๋๋‚œ n์˜ ๋งˆ์ง€๋ง‰ ๋น„ํŠธ๋ฅผ ๋ฐ€์–ด๋‚ด๋ฉฐ ๋‹ค์Œ ๋น„ํŠธ ์ค€๋น„
20+
n >>>= 1;
21+
}
22+
23+
// 32 ๋น„ํŠธ๋กœ ์ „ํ™˜ํ•ด return
24+
return result >>> 0;
25+
}
26+
27+
const n = 43261596;
28+
reverseBits(n);
29+
30+

0 commit comments

Comments
ย (0)