Skip to content

Commit f16e54a

Browse files
committed
fix: TC, SC
1 parent b7e3dd7 commit f16e54a

File tree

5 files changed

+39
-44
lines changed

5 files changed

+39
-44
lines changed

β€Žclimbing-stairs/whewchews.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
function climbStairs(n: number): number {
2-
/*
1+
/*
32
* 아이디어
43
* 측수 μ œν•œ: 1 <= n <= 45
54
* 1 or 2 step 만 올라갈 수 있음
@@ -12,7 +11,7 @@ function climbStairs(n: number): number {
1211
* 6 -> [1,1,1,1,1,1] [2,1,1,1,1] [...] [1,1,1,1,2] [2,2,1,1], [2,1,2,1], [2,1,1,2] [1,1,2,2], [1,2,1,2], [1,2,2,1]
1312
=> (1:n, 2:0) nκ°€μ§€ (1:n-2, 2:1) / nκ°€μ§€ (1: n-4, 2: n/2) C(n, n/2) κ°€μ§€
1413
*/
15-
14+
function climbStairs(n: number): number {
1615
// # Solution 1
1716

1817
// const stair = {1: 1, 2:2}
@@ -41,13 +40,14 @@ function climbStairs(n: number): number {
4140
// # Solution 3: μž¬κ·€
4241
const memo = { 1: 1, 2: 2 };
4342
function calculateClimbingWay(n, memo) {
44-
if (!(n in memo)) {
45-
if (n < 3) {
46-
return n;
47-
}
48-
memo[n] =
49-
calculateClimbingWay(n - 1, memo) + calculateClimbingWay(n - 2, memo);
43+
if (n in memo) return memo[n];
44+
45+
if (n < 3) {
46+
return n;
5047
}
48+
memo[n] =
49+
calculateClimbingWay(n - 1, memo) + calculateClimbingWay(n - 2, memo);
50+
5151
return memo[n];
5252
}
5353
return calculateClimbingWay(n, memo);

β€Žcoin-change/whewchews.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ function coinChange(coins: number[], amount: number): number {
88
* coinsλ₯Ό μˆœνšŒν•˜λ©΄μ„œ λˆ„μ μ•‘μ— 동전을 λ”ν•œ 값이 amount보닀 μž‘μœΌλ©΄ queue에 λ„£λŠ”λ‹€.
99
* queueκ°€ λΉŒλ•ŒκΉŒμ§€ 반볡
1010
* 큐가 λΉ„μ–΄μžˆκ³  amountλ₯Ό λ§Œλ“€μˆ˜ μ—†μœΌλ©΄ -1을 return
11-
*/ const queue = [[0, 0]]; // [number of coins, accumulated amount]
11+
*/
12+
const queue = [[0, 0]]; // [number of coins, accumulated amount]
1213
const visited = new Set();
1314

1415
while (queue.length > 0) {
@@ -28,5 +29,5 @@ function coinChange(coins: number[], amount: number): number {
2829
}
2930
return -1;
3031
}
31-
// TC: 각 κΈˆμ•‘(amount)λ§ˆλ‹€ 동전(coins)을 μˆœνšŒν•˜λ―€λ‘œ O(N*M) N: amount, M: coins.length
32+
// TC: 각 κΈˆμ•‘(amount)λ§ˆλ‹€ 동전(coins)을 μˆœνšŒν•˜λ―€λ‘œ O(N^2*M) N: amount, M: coins.length
3233
// SC: O(N) N: amount

β€Žcombination-sum/whewchews.ts

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,7 @@ function combinationSum(candidates: number[], target: number): number[][] {
3636
*
3737
*/
3838

39-
// TC: O(2^N) N = candidates.length
40-
// SC: O(T) T = target
39+
4140
function backtrack(candidates: number[], start:number, total:number){
4241
if(target === total){
4342
result.push([...path])
@@ -64,8 +63,8 @@ function combinationSum(candidates: number[], target: number): number[][] {
6463
return result
6564

6665
};
67-
// TC: O(2^N)
68-
// SC: O(2^N)
66+
// TC: O(n^t) n = candidates.length, t = target 크기
67+
// SC: O(t)
6968

7069
/* #Solution 2 : DP
7170
* candidates을 κ°€μ§€κ³  target 값을 λ§Œλ“€ 수 μžˆλŠ” λͺ¨λ“  쑰합을 미리 μ°Ύμ•„λ‘”λ‹€.
@@ -99,17 +98,13 @@ function combinationSum(candidates: number[], target: number): number[][] {
9998

10099

101100

102-
// SC: O(T+1) T = target
101+
// SC: O(t) t = target
103102
const dp = Array.from({ length: target + 1 }, () => []);
104103
dp[0] = [[]];
105104

106105

107-
// TC: O(C), C = candidates.length
108106
for (let candidate of candidates) {
109-
// TC: O(T) T = target
110107
for (let i = candidate; i <= target; i++) {
111-
// TC: O(K) K = dp[i - candidate].length
112-
// SC: O(K)
113108
for (let combination of dp[i - candidate]) {
114109
dp[i].push([...combination, candidate]);
115110
}
@@ -119,5 +114,5 @@ function combinationSum(candidates: number[], target: number): number[][] {
119114
return dp[target];
120115
}
121116

122-
// TC: O(C * T * K)
123-
// SC: O((T+1) * K* T)
117+
// TC: O(n * t * 2^n) n = candidates.length, t = target
118+
// SC: O((t*2^n) // μ΅œμ•…μ˜ 경우 λͺ¨λ“  μ‘°ν•©(2^n) μ €μž₯ κ°€λŠ₯

β€Žproduct-of-array-except-self/whewchews.ts

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
1+
/* #Solution 1
2+
* sum: 전체 곱을 κ΅¬ν•œλ‹€.
3+
* zeroCount: 0의 κ°œμˆ˜κ°€ λͺ‡κ°œμΈμ§€ μ„Όλ‹€.
4+
* 1. μžμ‹ μ΄ 0이면,
5+
* 1-1. μžμ‹ μ΄μ™Έμ˜ 0이 μžˆλŠ”μ§€ ν™•μΈν•˜κ³  있으면 0을 return
6+
* 1-2. μžμ‹  이외에 0이 μ—†μœΌλ©΄ 전체 곱을 return
7+
* 2. μžμ‹ μ΄ 0이 μ•„λ‹ˆλ©΄
8+
* 2-1. zeroCountκ°€ μžˆλŠ”μ§€ 보고 있으면 0을 return
9+
* 2-2. zeroκ°€ μ—†μœΌλ©΄ sum/selfλ₯Ό return
10+
*
11+
* κ·ΈλŸ¬λ‚˜... λ¬Έμ œμ— λ‚˜λˆ„κΈ° μ—°μ‚°μžλ₯Ό μ“°λ©΄ μ•ˆλœλ‹€κ³  ν–ˆμœΌλ―€λ‘œ Solution 2둜 κ°€μž.
12+
*/
113
function productExceptSelf(nums: number[]): number[] {
2-
/* #Solution 1
3-
* sum: 전체 곱을 κ΅¬ν•œλ‹€.
4-
* zeroCount: 0의 κ°œμˆ˜κ°€ λͺ‡κ°œμΈμ§€ μ„Όλ‹€.
5-
* 1. μžμ‹ μ΄ 0이면,
6-
* 1-1. μžμ‹ μ΄μ™Έμ˜ 0이 μžˆλŠ”μ§€ ν™•μΈν•˜κ³  있으면 0을 return
7-
* 1-2. μžμ‹  이외에 0이 μ—†μœΌλ©΄ 전체 곱을 return
8-
* 2. μžμ‹ μ΄ 0이 μ•„λ‹ˆλ©΄
9-
* 2-1. zeroCountκ°€ μžˆλŠ”μ§€ 보고 있으면 0을 return
10-
* 2-2. zeroκ°€ μ—†μœΌλ©΄ sum/selfλ₯Ό return
11-
*
12-
* κ·ΈλŸ¬λ‚˜... λ¬Έμ œμ— λ‚˜λˆ„κΈ° μ—°μ‚°μžλ₯Ό μ“°λ©΄ μ•ˆλœλ‹€κ³  ν–ˆμœΌλ―€λ‘œ Solution 2둜 κ°€μž.
13-
*/
1414
// let zeroCount = 0;
1515
// const sum = nums.reduce((p, c) => {
1616
// if (c === 0) {

β€Žtwo-sum/whewchews.ts

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
1+
/*
2+
* 아이디어
3+
* μ²˜μŒλΆ€ν„° 배열을 μˆœνšŒν•˜λ©° [0,1] [0,2] [0,3] [0, ...], [1,2], [1,3], [1,...] ... [nums.length-2, nums.length-1] λ₯Ό λŒλ©΄μ„œ 두 인자의 합이 target이 λ˜λŠ” 지점을 μ°ΎλŠ”λ‹€.
4+
* μˆœμ„œλŒ€λ‘œ 돌면 μ΅œμ•…μ˜ 경우 κ°€μž₯ λ§ˆμ§€λ§‰ μžλ¦¬κΉŒμ§€ 갈 μˆ˜λ„ μžˆλ‹€.
5+
* μ ˆλŒ€ 값이 λ˜μ§€ λͺ»ν•˜λŠ”, μ΅œμ†Œ 쑰건을 μƒκ°ν•΄λ³΄μž.
6+
* 주의1:λ²”μœ„κ°€ -10^9 <= nums[i] <= 10^9둜 μŒμˆ˜κ°’λ„ 있음
7+
* 주의2: μ •λ ¬λœ μˆœμ„œκ°€ μ•„λ‹˜.
8+
* 값을 Map에 μ €μž₯해두고 {value: index}, Map에 μžμ‹ κ³Ό λ”ν–ˆμ„λ•Œ target이 λ‚˜μ˜€λŠ” valueκ°€ μžˆλŠ”μ§€ 확인
9+
*/
110
function twoSum(nums: number[], target: number): number[] {
2-
/*
3-
* 아이디어
4-
* μ²˜μŒλΆ€ν„° 배열을 μˆœνšŒν•˜λ©° [0,1] [0,2] [0,3] [0, ...], [1,2], [1,3], [1,...] ... [nums.length-2, nums.length-1] λ₯Ό λŒλ©΄μ„œ 두 인자의 합이 target이 λ˜λŠ” 지점을 μ°ΎλŠ”λ‹€.
5-
* μˆœμ„œλŒ€λ‘œ 돌면 μ΅œμ•…μ˜ 경우 κ°€μž₯ λ§ˆμ§€λ§‰ μžλ¦¬κΉŒμ§€ 갈 μˆ˜λ„ μžˆλ‹€.
6-
* μ ˆλŒ€ 값이 λ˜μ§€ λͺ»ν•˜λŠ”, μ΅œμ†Œ 쑰건을 μƒκ°ν•΄λ³΄μž.
7-
* 주의1:λ²”μœ„κ°€ -10^9 <= nums[i] <= 10^9둜 μŒμˆ˜κ°’λ„ 있음
8-
* 주의2: μ •λ ¬λœ μˆœμ„œκ°€ μ•„λ‹˜.
9-
* 값을 Map에 μ €μž₯해두고 {value: index}, Map에 μžμ‹ κ³Ό λ”ν–ˆμ„λ•Œ target이 λ‚˜μ˜€λŠ” valueκ°€ μžˆλŠ”μ§€ 확인
10-
*/
11-
1211
// SC: O(N)
1312
const dict = new Map();
1413

0 commit comments

Comments
Β (0)