Skip to content

Commit e283832

Browse files
soobingclaude
andcommitted
refactor(soobing): rename soobing3.ts to soobing.ts
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
1 parent 0990e31 commit e283832

29 files changed

Lines changed: 109 additions & 424 deletions

File tree

File renamed without changes.

climbing-stairs/soobing.ts

Lines changed: 11 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,14 @@
1-
/**
2-
* 문제 유형
3-
* - DP (피보나치)
4-
*
5-
* 문제 설명
6-
* - 계단을 올라가는 방법의 수를 구하기
7-
*
8-
* 아이디어
9-
* 1) 피보나치 수열 활용
10-
* - climbStairs(n) = climbStairs(n-1) + climbStairs(n-2)
11-
*/
12-
function climbStairsBottomUp(n: number): number {
13-
function fibonacci(n: number, memo = new Map<number, number>()) {
14-
if (n === 1) return 1;
15-
if (n === 2) return 2;
1+
function climbStairs(n: number): number {
2+
const memo = new Map<number, number>();
3+
4+
function dp (n: number): number {
5+
if(n <= 1) return 1;
6+
if(memo.has(n)) return memo.get(n)!;
167

17-
if (memo.has(n)) return memo.get(n);
18-
const result = fibonacci(n - 1, memo) + fibonacci(n - 2, memo);
19-
memo.set(n, result);
20-
return result;
8+
const result = dp(n-1) + dp(n-2);
9+
memo.set(n, result);
10+
return result;
2111
}
22-
return fibonacci(n);
23-
}
2412

25-
function climbStairsTopDown(n: number): number {
26-
const dp = new Array(n + 1).fill(0);
27-
dp[1] = 1;
28-
dp[2] = 2;
29-
30-
for (let i = 3; i <= n; i++) {
31-
dp[i] = dp[i - 1] + dp[i - 2];
32-
}
33-
return dp[n];
34-
}
13+
return dp(n);
14+
};

climbing-stairs/soobing3.ts

Lines changed: 0 additions & 14 deletions
This file was deleted.

contains-duplicate/soobing.ts

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
function containsDuplicate(nums: number[]): boolean {
2-
const map = new Map();
3-
for (let i = 0; i < nums.length; i++) {
4-
if (map.get(nums[i])) {
5-
return true;
6-
} else map.set(nums[i], 1);
2+
const checkMap = new Map();
3+
for(const n of nums) {
4+
if(checkMap.has(n)) {
5+
return true;
6+
} else {
7+
checkMap.set(n, 1);
8+
}
79
}
8-
910
return false;
10-
}
11+
};

contains-duplicate/soobing3.ts

Lines changed: 0 additions & 11 deletions
This file was deleted.
File renamed without changes.

house-robber/soobing.ts

Lines changed: 9 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,10 @@
1-
/**
2-
* 문제 설명
3-
* - 주어진 배열의 시작과 끝이 연결되어 있는 원형이라고 할 경우에, 이웃하는 집은 털 수 없고 최대로 털 수 있는 돈을 구하는 문제
4-
*
5-
* 아이디어
6-
* 1) 동적 계획법(Dynamic Programming) 활용
7-
* - 원형 구조이므로 첫번째 집과 마지막집은 동시에 털 수 없음
8-
* - 따라서 두 가지 경우로 나누어 계산하고, 두 결과 중 더 큰 값을 반환
9-
* 2) 선형 배열에 대한 최대 금액 계산
10-
* - 매 순회마다 현재 집을 털 경우(prev2 + num)와 털지 않을 경우(prev1) 중 큰 값을 선택
11-
* - 최종적으로 prev1에 최대값이 저장
12-
*/
13-
function robLinear(nums: number[]) {
14-
let prev1 = 0;
15-
let prev2 = 0;
16-
17-
for (const num of nums) {
18-
const temp = prev1;
19-
prev1 = Math.max(prev2 + num, prev1);
20-
prev2 = temp;
21-
}
22-
23-
return prev1;
24-
}
25-
261
function rob(nums: number[]): number {
27-
if (nums.length === 1) return nums[0];
28-
if (nums.length === 2) return Math.max(nums[0], nums[1]);
29-
30-
const temp1 = robLinear(nums.slice(0, nums.length - 1));
31-
const temp2 = robLinear(nums.slice(1));
32-
33-
return Math.max(temp1, temp2);
34-
}
2+
const dp = new Array(nums.length);
3+
dp[0] = nums[0];
4+
dp[1] = Math.max(nums[0], nums[1]);
5+
6+
for(let i = 2; i < nums.length; i++) {
7+
dp[i] = Math.max(dp[i-1], dp[i-2] + nums[i]);
8+
}
9+
return dp[nums.length - 1];
10+
};

0 commit comments

Comments
 (0)