Skip to content

Commit 051b2dc

Browse files
authored
Merge pull request #1794 from soobing/week3
[soobing] WEEK 03 Solutions
2 parents 4a16556 + 3c937f6 commit 051b2dc

File tree

5 files changed

+123
-0
lines changed

5 files changed

+123
-0
lines changed

โ€Žcombination-sum/soobing2.ts

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
/**
2+
* ๋ฌธ์ œ ์œ ํ˜•
3+
* - DP: DFS + Backtracking
4+
*
5+
* ๋ฌธ์ œ ์„ค๋ช…
6+
* - ์ฃผ์–ด์ง„ ์ˆซ์ž ๋ฐฐ์—ด์—์„œ ์กฐํ•ฉ์„ ๋งŒ๋“ค์–ด์„œ ํ•ฉ์ด target์ด ๋˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์ฐพ๊ธฐ
7+
*
8+
* ์•„์ด๋””์–ด
9+
* 1) Backtracking ํ™œ์šฉ
10+
* - dfs๋ฅผ ํ†ตํ•ด ํ•ฉ์ด target์ด ๋˜๋Š” ๋ชจ๋“  ์ผ€์ด์Šค๋ฅผ ํƒ์ƒ‰ํ•œ๋‹ค. (๋‹จ, ์กฐ๊ฑด ์ฒดํฌ ํ›„์— ์ฆ‰์‹œ ์ค‘๋‹จ = ๋ฐฑํŠธ๋ž˜ํ‚น)
11+
*/
12+
function combinationSum(candidates: number[], target: number): number[][] {
13+
const result: number[][] = [];
14+
15+
function backtracking(
16+
startIndex: number,
17+
combination: number[],
18+
total: number
19+
) {
20+
if (total === target) {
21+
result.push([...combination]);
22+
return;
23+
}
24+
25+
if (total > target) return;
26+
27+
for (let i = startIndex; i < candidates.length; i++) {
28+
combination.push(candidates[i]);
29+
backtracking(i, combination, total + candidates[i]);
30+
combination.pop();
31+
}
32+
}
33+
34+
backtracking(0, [], 0);
35+
return result;
36+
}

โ€Ždecode-ways/soobing2.ts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
/**
2+
* ๋ฌธ์ œ ์œ ํ˜•
3+
* - DP (์ ํ™”์‹ ์ด์šฉ, ๋ฐฑํŠธ๋ž˜ํ‚น ์‚ฌ์šฉ์‹œ TLE ๋ฐœ์ƒ)
4+
*
5+
* ๋ฌธ์ œ ์„ค๋ช…
6+
* - ์ฃผ์–ด์ง„ ๋ฌธ์ž์—ด์„ ์ˆซ์ž๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์˜ ๊ฐฏ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ
7+
*
8+
* ์•„์ด๋””์–ด
9+
* 1) f(i) = ๋งˆ์ง€๋ง‰ ํ•œ์ž๋ฆฌ์ˆ˜๊ฐ€ ๋ณ€ํ™˜ ๊ฐ€๋Šฅํ•˜๋ฉด f(i-1) + ๋งˆ์ง€๋ง‰ ๋‘์ž๋ฆฌ์ˆ˜๊ฐ€ ๊ฐ€๋Šฅํ•˜๋ฉด f(i-2)
10+
* - ํ•œ์ž๋ฆฌ์ˆ˜๋Š” 0๋งŒ ์•„๋‹ˆ๋ฉด ๋จ, ๋‘์ž๋ฆฌ์ˆ˜๋Š” 10~26 ์‚ฌ์ด์—ฌ์•ผ ํ•จ.
11+
*
12+
*/
13+
function numDecodings(s: string): number {
14+
const n = s.length;
15+
if (n === 1) return s[0] === "0" ? 0 : 1;
16+
17+
const dp = Array(n + 1).fill(0);
18+
dp[0] = 1;
19+
dp[1] = s[0] === "0" ? 0 : 1;
20+
21+
for (let i = 2; i <= n; i++) {
22+
const one = Number(s[i - 1]);
23+
const two = Number(s[i - 2] + s[i - 1]);
24+
if (one !== 0) dp[i] += dp[i - 1];
25+
if (two >= 10 && two <= 26) dp[i] += dp[i - 2];
26+
}
27+
28+
return dp[n];
29+
}

โ€Žmaximum-subarray/soobing2.ts

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
/**
2+
* ๋ฌธ์ œ ์œ ํ˜•
3+
* - Array, DP
4+
*
5+
* ๋ฌธ์ œ ์„ค๋ช…
6+
* - ๋ฐฐ์—ด์—์„œ "์—ฐ์†๋œ" ๋ถ€๋ถ„ ๋ฐฐ์—ด์˜ ํ•ฉ ์ค‘ ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ๊ตฌํ•˜๊ธฐ
7+
*
8+
* ์•„์ด๋””์–ด
9+
* 1) Bottom-Up ๋ฐฉ์‹
10+
* - dp์—๋Š” ์•ž์—์„œ๋ถ€ํ„ฐ ์ด์–ด๋ถ™์ธ ๊ฐ’์ด ํฐ์ง€, ํ˜„์žฌ ๊ฐ’์—์„œ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋Š”๊ฒŒ ํด์ง€ ๋น„๊ตํ•˜์—ฌ ํฐ ๊ฐ’ ์ €์žฅ (ํ˜„์žฌ ๊ธฐ์ค€)
11+
* - maxSum์€ ์ „์ฒด dp์ค‘ ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ์ €์žฅ
12+
*/
13+
function maxSubArray(nums: number[]): number {
14+
const dp = new Array(nums.length);
15+
dp[0] = nums[0];
16+
let maxSum = nums[0];
17+
18+
for (let i = 1; i < nums.length; i++) {
19+
dp[i] = Math.max(dp[i - 1] + nums[i], nums[i]);
20+
maxSum = Math.max(maxSum, dp[i]);
21+
}
22+
return maxSum;
23+
}

โ€Žnumber-of-1-bits/soobing2.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
/**
2+
* ๋ฌธ์ œ ์œ ํ˜•
3+
* - Binary (๊ฐœ๋…์„ ์•Œ๊ณ ์žˆ๋Š”์ง€), ๊ธฐ๋ณธ์ ์ธ ๊ตฌํ˜„ ๋ฌธ์ œ
4+
*
5+
* ๋ฌธ์ œ ์„ค๋ช…
6+
* - ์ฃผ์–ด์ง„ ์ •์ˆ˜๋ฅผ 2์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ–ˆ์„๋•Œ 1์˜ ๊ฐฏ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ
7+
*
8+
* ์•„์ด๋””์–ด
9+
* 1) ๋‚˜๋ˆ„๊ธฐ 2๋ฅผ ํ†ตํ•ด 2์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  1์ธ ๊ฒฝ์šฐ ๊ฐฏ์ˆ˜๋ฅผ ์นด์šดํŠธํ•œ๋‹ค.
10+
*/
11+
function hammingWeight(n: number): number {
12+
let quotient = n;
13+
let count = 0;
14+
15+
while (quotient) {
16+
if (quotient % 2 === 1) count++;
17+
quotient = Math.floor(quotient / 2);
18+
}
19+
return count;
20+
}

โ€Žvalid-palindrome/soobing2.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
/**
2+
* ๋ฌธ์ œ ์œ ํ˜•
3+
* - ๋ฌธ์ž์—ด ์ฒ˜๋ฆฌ, ๋ฌธ์ž์—ด ๋น„๊ต
4+
*
5+
* ๋ฌธ์ œ ์„ค๋ช…
6+
* - ์ฃผ์–ด์ง„ ๋ฌธ์ž์—ด์ด ํŒฐ๋ฆฐ๋“œ๋กฌ์ธ์ง€ ํ™•์ธํ•˜๋Š” ๋ฌธ์ œ
7+
*
8+
* ์•„์ด๋””์–ด
9+
* 1) ์ฃผ์–ด์ง„ ๋ฌธ์ž์—ด์—์„œ ์ˆซ์ž, ์•ŒํŒŒ๋ฒณ๋งŒ ๋‚จ๊ฒจ๋‘๊ณ  ์†Œ๋ฌธ์ž๋กœ ๋ณ€ํ™˜ ํ›„์— ํŒฐ๋ฆฐ๋“œ๋กฌ์ธ์ง€ ํ™•์ธ
10+
*/
11+
function isPalindrome(s: string): boolean {
12+
const original = s.replace(/[^a-zA-Z0-9]/g, "").toLowerCase();
13+
const reverse = original.split("").reverse().join("");
14+
return original === reverse;
15+
}

0 commit comments

Comments
ย (0)