Skip to content

Commit 01f8f31

Browse files
authored
Merge pull request #1896 from hyer0705/main
2 parents 5e1bebf + 471cb16 commit 01f8f31

File tree

5 files changed

+165
-0
lines changed

5 files changed

+165
-0
lines changed

clone-graph/hyer0705.ts

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
/**
2+
* Definition for _Node.
3+
* class _Node {
4+
* val: number
5+
* neighbors: _Node[]
6+
*
7+
* constructor(val?: number, neighbors?: _Node[]) {
8+
* this.val = (val===undefined ? 0 : val)
9+
* this.neighbors = (neighbors===undefined ? [] : neighbors)
10+
* }
11+
* }
12+
*
13+
*/
14+
15+
function cloneGraph(node: _Node | null): _Node | null {
16+
if (!node) return null;
17+
18+
const cloned = new Map<number, _Node>();
19+
20+
const queue: _Node[] = [];
21+
22+
const copied = new _Node(node.val);
23+
cloned.set(node.val, copied);
24+
25+
queue.push(node);
26+
27+
let pointer = 0;
28+
29+
while (pointer < queue.length) {
30+
const current = queue[pointer++];
31+
32+
const copiedNode = cloned.get(current.val)!;
33+
34+
for (const neighbor of current.neighbors) {
35+
if (!cloned.has(neighbor.val)) {
36+
const copiedNeighbor = new _Node(neighbor.val);
37+
cloned.set(neighbor.val, copiedNeighbor);
38+
39+
queue.push(neighbor);
40+
}
41+
copiedNode.neighbors.push(cloned.get(neighbor.val)!);
42+
}
43+
}
44+
45+
return copied;
46+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
function longestCommonSubsequence(text1: string, text2: string): number {
2+
const m = text1.length;
3+
const n = text2.length;
4+
5+
const dp: number[][] = Array.from({ length: m + 1 }, () => Array(n + 1).fill(0));
6+
7+
for (let i = 1; i <= m; i++) {
8+
for (let j = 1; j <= n; j++) {
9+
if (text1[i - 1] === text2[j - 1]) {
10+
dp[i][j] = dp[i - 1][j - 1] + 1;
11+
} else {
12+
dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);
13+
}
14+
}
15+
}
16+
17+
return dp[m][n];
18+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
function characterReplacement(s: string, k: number): number {
2+
let longestLength = 0;
3+
let windowStart = 0;
4+
5+
const countMap = new Map<string, number>();
6+
let maxCount = 0;
7+
8+
for (let windowEnd = 0; windowEnd < s.length; windowEnd++) {
9+
const currentCh = s[windowEnd];
10+
countMap.set(currentCh, (countMap.get(currentCh) || 0) + 1);
11+
12+
maxCount = Math.max(maxCount, countMap.get(currentCh) || 0);
13+
if (windowEnd - windowStart + 1 - maxCount > k) {
14+
countMap.set(s[windowStart], (countMap.get(s[windowStart]) || 0) - 1);
15+
16+
windowStart++;
17+
}
18+
longestLength = Math.max(longestLength, windowEnd - windowStart + 1);
19+
}
20+
21+
return longestLength;
22+
}

palindromic-substrings/hyer0705.ts

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
function countSubstrings(s: string): number {
2+
const sLen = s.length;
3+
4+
const dp: boolean[][] = Array.from({ length: sLen }, () => Array(sLen).fill(false));
5+
6+
// 길이가 1
7+
for (let i = 0; i < sLen; i++) {
8+
dp[i][i] = true;
9+
}
10+
11+
// 길이가 2
12+
for (let i = 0; i < sLen - 1; i++) {
13+
dp[i][i + 1] = s[i] === s[i + 1];
14+
}
15+
16+
// 길이가 3이상
17+
for (let len = 3; len <= sLen; len++) {
18+
for (let i = 0; i < sLen - len + 1; i++) {
19+
const j = i + len - 1;
20+
if (s[i] === s[j] && dp[i + 1][j - 1]) {
21+
dp[i][j] = true;
22+
}
23+
}
24+
}
25+
26+
let count = 0;
27+
for (let i = 0; i < dp.length; i++) {
28+
for (let j = 0; j < dp[i].length; j++) {
29+
if (dp[i][j]) count++;
30+
}
31+
}
32+
33+
return count;
34+
}

reverse-bits/hyer0705.ts

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
// 8비트로 쪼갠 방법
2+
function reverseBits(n: number): number {
3+
const TOTAL_BITS = 32;
4+
const BITS_IN_BYTE = 8;
5+
const BYTES_IN_INTEGER = TOTAL_BITS / BITS_IN_BYTE;
6+
const BYTE_MASK = 0xff;
7+
8+
let result = 0;
9+
10+
const reversedByteCache: number[] = Array.from({ length: 2 ** BITS_IN_BYTE }, (_, n) => {
11+
let reversedNum = 0;
12+
13+
for (let i = 0; i < BITS_IN_BYTE; i++) {
14+
const bit = (n >>> i) & 1;
15+
reversedNum |= bit << (BITS_IN_BYTE - 1 - i);
16+
}
17+
18+
return reversedNum;
19+
});
20+
21+
for (let i = 0; i < BYTES_IN_INTEGER; i++) {
22+
const byte = (n >>> (i * BITS_IN_BYTE)) & BYTE_MASK;
23+
24+
const reversed = reversedByteCache[byte];
25+
result |= reversed << (TOTAL_BITS - (i + 1) * BITS_IN_BYTE);
26+
}
27+
28+
return result >>> 0;
29+
}
30+
31+
// 32번 연산 방법
32+
function reverseBits(n: number): number {
33+
const BITS_LEN = 32;
34+
35+
let reversed = 0;
36+
37+
for (let i = 0; i < BITS_LEN; i++) {
38+
const bit = (n >>> i) & 1;
39+
40+
const reversedPosition = 31 - i;
41+
reversed |= bit << reversedPosition;
42+
}
43+
44+
return reversed >>> 0;
45+
}

0 commit comments

Comments
 (0)