Skip to content

Commit 34f0816

Browse files
authored
Merge pull request #386 from naringst/main
[๋‚˜๋ฆฌ] WEEK 03 Solutions
2 parents 01e005a + 35ded94 commit 34f0816

File tree

5 files changed

+261
-0
lines changed

5 files changed

+261
-0
lines changed

โ€Žclimbing-stairs/naringst.js

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
/**
2+
* @param {number} n
3+
* @return {number}
4+
*/
5+
/**
6+
* Note: DP
7+
* ๊ฒฐ๊ตญ 1๊ฐœ ์ „์˜ ๊ฐ’์—์„œ 1์นธ์„ ๋” ๊ฐ€๊ฑฐ๋‚˜, 2๊ฐœ ์ „์˜ ๊ฐ’์—์„œ 2์นธ์„ ๋” ๊ฐ€๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ์ƒ๊ธด๋‹ค.
8+
* 1์ผ๋•Œ์—๋Š” 1์นธ์„ ๊ฐ€๋Š” ๋ฐฉ๋ฒ•์˜ ๊ฒฝ์šฐ ๋ฟ์ด์ง€๋งŒ, 2์ผ๋•Œ์—๋Š” 0์นธ ๊ฐ€๋Š” ๊ฒƒ์—์„œ 2์นธ์„ ๊ฐ€๊ฑฐ๋‚˜ 1์นธ์„ ๊ฐ€๋Š” ๊ฒƒ์—์„œ 1์นธ์„ ๋” ๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.
9+
* 3์ผ ๋•Œ์—๋Š” 1๊นŒ์ง€ ๊ฐ”์„ ๊ฒฝ์šฐ์—์„œ 2์นธ์„ ๋” ๊ฐ€๊ฑฐ๋‚˜, 2๊นŒ์ง€ ๊ฐ”์„ ๊ฒฝ์šฐ์—์„œ 1์นธ์„ ๋” ๊ฐ€๋ฉด ๋˜๋‹ˆ๊นŒ 1๊นŒ์ง€ ๊ฐ”์„ ๊ฒฝ์šฐ์˜ ์ˆ˜ + 2๊นŒ์ง€ ๊ฐ”์„ ๊ฒฝ์šฐ์˜ ์ˆ˜
10+
*
11+
*
12+
* Runtime: 41ms, Memory: 48.95MB
13+
* Time complexity: O(n)
14+
* Space complexity: O(n)
15+
*
16+
*/
17+
18+
var climbStairs = function (n) {
19+
const dp = Array(n).fill(0);
20+
dp[1] = 1;
21+
dp[2] = 2;
22+
23+
for (let i = 3; i < n + 1; i++) {
24+
dp[i] = dp[i - 2] + dp[i - 1];
25+
}
26+
27+
return dp[n];
28+
};

โ€Žcoin-change/naringst.js

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
/**
2+
* @param {number[]} coins
3+
* @param {number} amount
4+
* @return {number}
5+
*/
6+
7+
/**
8+
* combination sum ํ’€์ด๋ฅผ ํ™œ์šฉํ–ˆ์ง€๋งŒ amount๊ฐ€ ์ปค์„œ
9+
* time limit exceeded
10+
* */
11+
12+
var coinChange = function (coins, amount) {
13+
let answer = [];
14+
let coins_desc = coins.reverse();
15+
16+
if (amount === 0) return 0;
17+
18+
function permute(arr = [], sum = 0, index = 0) {
19+
if (sum > amount) return;
20+
// ๊ฐ™์€ ๊ฒฝ์šฐ์—๋งŒ result์— ๋‹ด๊ธฐ
21+
if (sum === amount) {
22+
if (answer.length === 0) {
23+
answer = [...arr];
24+
} else {
25+
if (arr.length < answer.length) {
26+
answer = [...arr];
27+
} else {
28+
return answer.length;
29+
}
30+
}
31+
}
32+
for (let i = index; i < coins.length; i++) {
33+
// target๋ณด๋‹ค ํ•ฉ์ด ์ž‘์œผ๋ฉด ์žฌ๊ท€์ ์œผ๋กœ ํ•ด๋‹น ๊ฐ’์„ arr์— ๋„ฃ๊ณ , sum์— ์ถ”๊ฐ€
34+
permute([...arr, coins_desc[i]], sum + coins_desc[i], i);
35+
}
36+
}
37+
permute();
38+
return answer.length === 0 ? -1 : answer.length;
39+
};
40+
41+
/**
42+
* ํ’€์ด(์ฐธ๊ณ ): combination sum์„ dp๋กœ ํ’€๋ ค๊ณ  ํ–ˆ์—ˆ๋Š”๋ฐ, ์‚ฌ์‹ค ์ด ๋ฌธ์ œ๊ฐ€ dp๋กœ ํ’€์–ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ
43+
*/
44+
45+
/**
46+
* @param {number[]} coins
47+
* @param {number} amount
48+
* @return {number}
49+
*/
50+
var coinChange = function (coins, amount) {
51+
let dp = Array.from({ length: amount + 1 }, () => Infinity);
52+
dp[0] = 0;
53+
54+
for (const coin of coins) {
55+
for (let i = coin; i <= amount; i += 1) {
56+
dp[i] = Math.min(dp[i], dp[i - coin] + 1);
57+
}
58+
}
59+
60+
return dp[amount] === Infinity ? -1 : dp[amount];
61+
};

โ€Žcombination-sum/naringst.js

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
/**
2+
* NOTE:
3+
* 1. dp๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ–ˆ์œผ๋‚˜ ์‹œ๊ฐ„์ดˆ๊ณผ
4+
* 2. ์žฌ๊ท€๋ฅผ ํ™œ์šฉํ•ด ๊ฐ€๋Šฅํ•œ ํ•œ ๋ชจ๋“  ์ค‘๋ณต์กฐํ•ฉ์„ ๊ตฌํ•ด์„œ ๊ณ„์‚ฐํ•˜๊ธฐ
5+
*
6+
*/
7+
8+
// 1๋ฒˆ ์‹œ๋„
9+
10+
var combinationSum = function (candidates, target) {
11+
const dp = Array(target + 1).fill(1);
12+
13+
for (let i = 2; i < candidates.length; i++) {
14+
dp[i] = 1;
15+
for (let j = 1 < Math.floor(i / 2); ; j++) {
16+
dp[i] += dp[j] * dp[i - j];
17+
}
18+
// ...์ด๋ฏธ ์‹œ๊ฐ„์ดˆ๊ณผ
19+
}
20+
};
21+
22+
// 2๋ฒˆ ํ’€์ด(์ฐธ๊ณ )
23+
// ์žฌ๊ท€๋ฅผ ํ™œ์šฉํ•ด ํ•œ ๊ฐ’์ด ์ค‘๋ณต์œผ๋กœ ๋”ํ•ด์ง€๋Š” ๋ถ€๋ถ„์„ ์ฒ˜๋ฆฌ -> target๋ณด๋‹ค ํด๋•Œ๊นŒ์ง€ ์žฌ๊ท€
24+
// for ๋ฌธ์„ ํ™œ์šฉํ•ด candidates์˜ ๋ชจ๋“  ๊ฐ’์„ ์ˆœํšŒ
25+
//
26+
/**
27+
* Runtime: 78ms, Memory: 59.13MB
28+
* Time complexity: O(n * target/n) => O(2^n * k) by gpt (k: ์กฐํ•ฉ์˜ ๊ธธ์ด)
29+
* Space complexity: O(n * target/n) => O(target) + O(2^n * k ) by gpt
30+
*
31+
*/
32+
33+
var combinationSum = function (candidates, target) {
34+
const result = [];
35+
36+
function permute(arr = [], sum = 0, idx = 0) {
37+
// target๋ณด๋‹ค ํ•ฉ์ด ํฌ๋ฉด ๋ฆฌํ„ด
38+
if (sum > target) return;
39+
// ๊ฐ™์€ ๊ฒฝ์šฐ์—๋งŒ result์— ๋‹ด๊ธฐ
40+
if (sum === target) result.push(arr);
41+
42+
for (let i = idx; i < candidates.length; i++) {
43+
// target๋ณด๋‹ค ํ•ฉ์ด ์ž‘์œผ๋ฉด ์žฌ๊ท€์ ์œผ๋กœ ํ•ด๋‹น ๊ฐ’์„ arr์— ๋„ฃ๊ณ , sum์— ์ถ”๊ฐ€
44+
permute([...arr, candidates[i]], sum + candidates[i], i);
45+
}
46+
}
47+
permute();
48+
return result;
49+
};
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
/**
2+
* @param {number[]} nums
3+
* @return {number[]}
4+
*/
5+
6+
/**
7+
* Runtime: 124ms, Memory: 65.06MB
8+
* Time complexity: O(n^2)
9+
* Space complexity: O(n)
10+
* -> answer ๋ฐฐ์—ด์— O(n)
11+
* -> splicedArr ๋ฐฐ์—ด์— O(n)
12+
*/
13+
14+
var productExceptSelf = function (nums) {
15+
const totalProduct = nums.reduce((total, current) => total * current, 1);
16+
const answer = Array(nums.length).fill(0);
17+
18+
for (let i = 0; i < nums.length; i++) {
19+
answer[i] = totalProduct / nums[i];
20+
if (nums[i] === 0) {
21+
const splicedArr = nums.filter(function (_, index) {
22+
return index !== i;
23+
});
24+
answer[i] = splicedArr.reduce((total, current) => total * current, 1);
25+
}
26+
}
27+
28+
return answer;
29+
};
30+
31+
/**
32+
* @param {number[]} nums
33+
* @return {number[]}
34+
*/
35+
36+
/**
37+
* ์œ„์˜ ํ’€์ด๋Š” 0์ผ ๋•Œ๋งˆ๋‹ค ์ˆœํšŒ๋ฅผ ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ๋ถ€๋ถ„์„ 0์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ์–ด ์ฒ˜๋ฆฌํ•˜๋„๋ก ๋ณ€๊ฒฝํ•œ ํ’€์ด
38+
39+
* Runtime: 109ms, Memory: 63.45MB
40+
* Time complexity: O(n)
41+
* Space complexity: O(n)
42+
43+
*/
44+
var productExceptSelf = function (nums) {
45+
let totalProduct = 1;
46+
let zeroCount = 0;
47+
const answer = Array(nums.length).fill(0);
48+
49+
for (let numIndex = 0; numIndex < nums.length; numIndex++) {
50+
if (nums[numIndex] === 0) {
51+
zeroCount += 1;
52+
} else {
53+
totalProduct *= nums[numIndex];
54+
}
55+
}
56+
57+
for (let i = 0; i < nums.length; i++) {
58+
if (nums[i] === 0) {
59+
if (zeroCount - 1 > 0) {
60+
answer[i] = 0;
61+
} else {
62+
answer[i] = totalProduct;
63+
}
64+
} else {
65+
if (zeroCount > 0) {
66+
answer[i] = 0;
67+
} else {
68+
answer[i] = totalProduct / nums[i];
69+
}
70+
}
71+
}
72+
73+
return answer;
74+
};

โ€Žtwo-sum/naringst.js

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
/**
2+
* @param {number[]} nums
3+
* @param {number} target
4+
* @return {number[]}
5+
*/
6+
7+
/**
8+
* Runtime: 107ms, Memory: 49.52MB
9+
* Time complexity: O(n^2)
10+
* Space complexity: O(n^2)
11+
*
12+
* **/
13+
14+
var twoSum = function (nums, target) {
15+
const answer = [];
16+
for (let i = 0; i < nums.length - 1; i++) {
17+
for (let j = i + 1; j < nums.length; j++) {
18+
if (nums[i] + nums[j] === target) {
19+
return [i, j];
20+
}
21+
}
22+
}
23+
};
24+
25+
/**
26+
* @param {number[]} nums
27+
* @param {number} target
28+
* @return {number[]}
29+
*/
30+
31+
/**
32+
* ๋‹ค๋ฅธ ํ’€์ด: two์˜ sum ์ด๋‹ˆ๊นŒ target - ํ˜„์žฌ ๊ฐ’์„ ํ•œ ๋’ค, ๋‚˜๋จธ์ง€ ๊ฐ’์ด ๋ฐฐ์—ด์— ์žˆ๋Š”์ง€ ์ฐพ๋Š” ๋ฐฉ๋ฒ•.
33+
* ์ด ๊ณผ์ •์—์„œ ํ•ด์‹œ๋งต์„ ์‚ฌ์šฉํ•ด์„œ target - ํ˜„์žฌ ๊ฐ’์ด map ์— ์กด์žฌํ•˜๋ฉด return
34+
* ์—†๋‹ค๋ฉด map์— ๋‚˜๋จธ์ง€ ๊ฐ’๊ณผ ๊ทธ์— ํ•ด๋‹นํ•˜๋Š” ์ธ๋ฑ์Šค๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.
35+
* ๊ทธ๋Ÿผ ์ถ”ํ›„์—๋Š” ๋‚˜๋จธ์ง€ ๊ฐ’์„ map์—์„œ O(1)๋กœ ์ฐพ๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค.
36+
*
37+
* Runtime: 49ms, Memory: 49.52MB
38+
* Time complexity: O(n)
39+
* Space complexity: O(n)
40+
* **/
41+
42+
var twoSum = function (nums, target) {
43+
let map = new Map();
44+
45+
for (i = 0; i < nums.length; i++) {
46+
if (map.has(target - nums[i])) return [map.get(target - nums[i]), i];
47+
map.set(nums[i], i);
48+
}
49+
};

0 commit comments

Comments
ย (0)