Skip to content

Commit 1407d9c

Browse files
authored
Merge pull request #974 from Yjason-K/main
[gomgom22] Week8
2 parents 5f7b247 + 4aa4aa4 commit 1407d9c

File tree

4 files changed

+125
-0
lines changed

4 files changed

+125
-0
lines changed
+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/**
2+
* ๋‘ ๋ฌธ์ž์—ด์˜ ์ตœ์žฅ ๊ณตํ†ต ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด ๊ตฌํ•˜๊ธฐ.
3+
*
4+
* @param {string} text1 - ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ž์—ด
5+
* @param {string} text2 - ๋‘ ๋ฒˆ์งธ ๋ฌธ์ž์—ด
6+
* @returns {number} - ์ตœ์žฅ ๊ณตํ†ต ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด
7+
*
8+
* ์‹œ๊ฐ„ ๋ณต์žก๋„:
9+
* - O(m * n) : ๋‘ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋ฅผ ๊ฐ๊ฐ m, n์ด๋ผ๊ณ  ํ•  ๋•Œ, DP ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.
10+
*
11+
* ๊ณต๊ฐ„ ๋ณต์žก๋„:
12+
* - O(m * n) : m+1 x n+1 ํฌ๊ธฐ์˜ 2์ฐจ์› DP ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•˜์—ฌ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
13+
*/
14+
function longestCommonSubsequence(text1: string, text2: string): number {
15+
const m = text1.length;
16+
const n = text2.length;
17+
18+
// DP ํ…Œ์ด๋ธ” ์ƒ์„ฑ (m+1 x n+1 ํฌ๊ธฐ)
19+
const dp: number[][] = Array.from({ length: m + 1 }, () => Array(n + 1).fill(0));
20+
21+
// DP ๊ณ„์‚ฐ
22+
for (let i = 1; i <= m; i++) {
23+
for (let j = 1; j <= n; j++) {
24+
if (text1[i - 1] === text2[j - 1]) {
25+
// ๋ฌธ์ž๊ฐ€ ์ผ์น˜ํ•˜๋ฉด ์ด์ „ ๊ฐ’์— +1
26+
dp[i][j] = dp[i - 1][j - 1] + 1;
27+
} else {
28+
// ๋ฌธ์ž๊ฐ€ ๋‹ค๋ฅด๋ฉด ์™ผ์ชฝ๊ณผ ์œ„์ชฝ ๊ฐ’ ์ค‘ ํฐ ๊ฐ’ ์„ ํƒ
29+
dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);
30+
}
31+
}
32+
}
33+
34+
// ์ตœ์žฅ ๊ณตํ†ต ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด
35+
return dp[m][n];
36+
}
37+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
/**
2+
* sliding window
3+
* ๋ฌธ์ž์—ด k๋ฒˆ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ, ๊ฐ€์žฅ ๊ธด ๋ฐ˜๋ณต ๋ฌธ์ž์—ด์˜ ๊ธธ์ด ๊ตฌํ•˜๊ธฐ.
4+
* @param {string} s - ๋ฌธ์ž์—ด
5+
* @param {number} k - ๋ฌธ์ž ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ ํšŸ์ˆ˜
6+
* @return {number} - ๊ฐ€์žฅ ๊ธด ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด
7+
*
8+
* ์‹œ๊ฐ„ ๋ณต์ ‘๋„: O(n)
9+
* - ๋ฌธ์ž๊ธธ์ด ๋งŒํผ์˜ 1ํšŒ ์ˆœํšŒ
10+
*
11+
* ๊ณต๊ฐ„ ๋ณต์žก๋„: O(1)
12+
* - ์•ŒํŒŒ๋ฒณ 26๊ฐœ์˜ ์ œํ•œ๋œ Map ์‚ฌ์šฉ
13+
*
14+
*/
15+
function characterReplacement(s: string, k: number): number {
16+
// ๋ฌธ์ž์˜ ๋นˆ๋„๋ฅผ ์ €์žฅํ•  Map
17+
const charFreq = new Map<string, number>();
18+
19+
// window ์™ผ์ชฝ ํฌ์ธํ„ฐ
20+
let left = 0;
21+
22+
// ์ตœ๋Œ€ ๊ธธ์ด, ์ตœ๋Œ€ ๋นˆ๋„ ์ดˆ๊ธฐํ™”
23+
let maxLength = 0;
24+
let maxFreq = 0;
25+
26+
// ์˜ค๋ฅธ์ชฝ ํฌ์ธํ„ฐ๋ฅผ 0๋ถ€ํ„ฐ ์ด๋™ํ•˜๋ฉฐ window ํฌ๊ธฐ ์กฐ์ ˆ
27+
for (let right = 0; right < s.length; right++) {
28+
const char = s[right];
29+
30+
// ํ˜„์žฌ ๋ฌธ์ž์˜ ๋นˆ๋„ ์ฆ๊ฐ€
31+
charFreq.set(char, (charFreq.get(char) || 0) + 1);
32+
33+
// ์œˆ๋„์šฐ ๋‚ด์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ๋“ฑ์žฅํ•œ ๋ฌธ์ž์˜ ๋นˆ๋„ ๊ฐฑ์‹ 
34+
maxFreq = Math.max(maxFreq, charFreq.get(char)!);
35+
36+
// ์กฐ๊ฑด: (์œˆ๋„์šฐ ํฌ๊ธฐ - maxFreq > k)์ผ ๋•Œ, ์™ผ์ชฝ ํฌ์ธํ„ฐ ์ด๋™
37+
if (right - left + 1 - maxFreq > k) {
38+
const leftChar = s[left];
39+
charFreq.set(leftChar, charFreq.get(leftChar)! - 1); // ์™ผ์ชฝ ๋ฌธ์ž ์ œ๊ฑฐ
40+
left++; // ์œˆ๋„์šฐ ์ถ•์†Œ
41+
}
42+
43+
// ํ˜„์žฌ ์œˆ๋„์šฐ ํฌ๊ธฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ตœ๋Œ€ ๊ธธ์ด ๊ฐฑ์‹ 
44+
maxLength = Math.max(maxLength, right - left + 1);
45+
}
46+
47+
return maxLength;
48+
49+
}
50+

โ€Žnumber-of-1-bits/Yjason-K.ts

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
/**
2+
* ์ฃผ์–ด์ง„ ์ˆซ์ž `n`์˜ 2์ง„์ˆ˜ ํ‘œํ˜„์—์„œ 1์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ณ„์‚ฐ.
3+
*
4+
* @param {number} n - 1์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•  ์ˆซ์ž (์–‘์˜ ์ •์ˆ˜)
5+
* @returns {number} - 2์ง„์ˆ˜์—์„œ 1์˜ ๊ฐœ์ˆ˜
6+
*
7+
* ์‹œ๊ฐ„ ๋ณต์žก๋„: O(k)
8+
* - `k`๋Š” ์ˆซ์ž `n`์˜ 2์ง„์ˆ˜ ํ‘œํ˜„ ๊ธธ์ด (log2(n))
9+
* - `toString(2)` ์—ฐ์‚ฐ๊ณผ ๋ฐฐ์—ด ์ˆœํšŒ๋ฅผ ํฌํ•จ.
10+
*
11+
* ๊ณต๊ฐ„ ๋ณต์žก๋„: O(k)
12+
* - 2์ง„์ˆ˜ ๋ฌธ์ž์—ด๊ณผ ๋ฌธ์ž์—ด ๋ฐฐ์—ด์„ ์ €์žฅํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ํฌํ•จ.
13+
*/
14+
function hammingWeight(n: number): number {
15+
// 1. ์ž…๋ ฅ ์ˆซ์ž `n`์„ 2์ง„์ˆ˜ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜
16+
// 2. 2์ง„์ˆ˜ ๋ฌธ์ž์—ด์„ ๊ฐœ๋ณ„ ๋ฌธ์ž๋กœ ๋‚˜๋ˆ„์–ด ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜
17+
// 3. ๋ฐฐ์—ด์—์„œ 1์˜ ๊ฐœ์ˆ˜๋ฅผ ๋ˆ„์ ํ•˜์—ฌ ํ•ฉ์‚ฐ
18+
return n.toString(2).split('').reduce((a, b) => a + Number(b), 0);
19+
};
20+

โ€Žsum-of-two-integers/Yjason-K.ts

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
/**
2+
* +, - ๊ธฐํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋‘ ์ •์ˆ˜์˜ ํ•ฉ์„ ๊ตฌํ•˜๊ธฐ
3+
* @param {number} a - ์ •์ˆ˜
4+
* @param {number} b - ์ •์ˆ˜
5+
* @return {number} - ๋‘ ์ •์ˆ˜์˜ ํ•ฉ
6+
*/
7+
function getSum(a: number, b: number): number {
8+
// 1. XOR ์—ฐ์‚ฐ์œผ๋กœ ๋ง์…ˆ ์ฒ˜๋ฆฌ
9+
// 2. AND ์—ฐ์‚ฐ์œผ๋กœ ์˜ฌ๋ฆผ ์ฒ˜๋ฆฌ
10+
// 3. ์˜ฌ๋ฆผ์ด ์—†์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต
11+
while (b !== 0) {
12+
const carry = a & b;
13+
a = a ^ b;
14+
b = carry << 1;
15+
}
16+
return a;
17+
}
18+

0 commit comments

Comments
ย (0)