Skip to content

Commit 7a813ab

Browse files
authored
Merge pull request #1790 from reach0908/main
[reach0908] WEEK 03 solutions
2 parents ba016d3 + cc752e5 commit 7a813ab

File tree

5 files changed

+176
-0
lines changed

5 files changed

+176
-0
lines changed

combination-sum/reach0908.js

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
/**
2+
* 시간복잡도 O(n^(T/m))
3+
* 풀이방법: DFS 백트래킹
4+
* 결과: 2ms
5+
* @param {number[]} candidates
6+
* @param {number} target
7+
* @return {number[][]}
8+
*/
9+
const combinationSum = function (candidates, target) {
10+
const result = [];
11+
const nums = [];
12+
13+
const sortedCandidates = candidates.sort((a, b) => a - b);
14+
15+
function dfs(start, sum) {
16+
if (sum === target) {
17+
result.push([...nums]);
18+
}
19+
20+
for (let i = start; i < sortedCandidates.length; i += 1) {
21+
const num = sortedCandidates[i];
22+
23+
if (sum + num > target) break;
24+
25+
nums.push(num);
26+
dfs(i, sum + num);
27+
nums.pop();
28+
}
29+
}
30+
31+
dfs(0, 0);
32+
33+
return result;
34+
};

decode-ways/reach0908.js

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
/**
2+
* 시간복잡도: O(n)
3+
* 실행속도: 65ms
4+
* @param {string} s
5+
* @return {number}
6+
*/
7+
const numDecodings = function (s) {
8+
const n = s.length;
9+
10+
const memo = new Array(n + 1).fill(0);
11+
12+
function dfs(i) {
13+
if (i === n) {
14+
return 1;
15+
}
16+
17+
if (s[i] === "0") {
18+
return 0;
19+
}
20+
21+
if (memo[i]) {
22+
return memo[i];
23+
}
24+
25+
let res = dfs(i + 1);
26+
27+
if (i + 1 < n && Number(s.slice(i, i + 2) <= 26)) {
28+
res += dfs(i + 2);
29+
}
30+
31+
memo[i] = res;
32+
33+
return res;
34+
}
35+
36+
return dfs[0];
37+
};
38+
39+
/**
40+
* 시간복잡도: O(n)
41+
* 실행속도: 0~1ms
42+
* @param {string} s
43+
* @return {number}
44+
*/
45+
/**
46+
* 시간 복잡도: O(n)
47+
* 공간 복잡도: O(n)
48+
*/
49+
var numDecodings2 = function (s) {
50+
const memo = new Map();
51+
memo.set(s.length, 1);
52+
53+
function dfs(start) {
54+
if (memo.has(start)) {
55+
return memo.get(start);
56+
}
57+
58+
if (s[start] === "0") {
59+
memo.set(start, 0);
60+
} else if (
61+
start + 1 < s.length &&
62+
parseInt(s.slice(start, start + 2)) < 27
63+
) {
64+
memo.set(start, dfs(start + 1) + dfs(start + 2));
65+
} else {
66+
memo.set(start, dfs(start + 1));
67+
}
68+
69+
return memo.get(start);
70+
}
71+
72+
return dfs(0);
73+
};

maximum-subarray/reach0908.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
/**
2+
* 시간복잡도: O(n)
3+
* 시간: 4ms
4+
* @param {number[]} nums
5+
* @return {number}
6+
*/
7+
var maxSubArray = function (nums) {
8+
let maxResult = nums[0];
9+
let curResult = nums[0];
10+
11+
for (let i = 1; i < nums.length; i += 1) {
12+
const num = nums[i];
13+
// 지금까지 누적합 vs 현재 날짜
14+
result = Math.max(curResult + num, num);
15+
maxResult = Math.max(maxResult, curResult);
16+
}
17+
18+
return maxResult;
19+
};

number-of-1-bits/reach0908.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
/**
2+
* 시간복잡도: O(n)
3+
* 공간복잡도: O(1)
4+
* @param {number} n
5+
* @return {number}
6+
*/
7+
var hammingWeight = function (n) {
8+
let num = n;
9+
10+
let count = 0;
11+
12+
while (num > 0) {
13+
const left = num % 2;
14+
15+
if (left === 1) {
16+
count += 1;
17+
}
18+
19+
num = Math.floor(num / 2);
20+
}
21+
22+
return count;
23+
};

valid-palindrome/reach0908.js

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
/**
2+
* 시간복잡도: O(N)
3+
* 공간복잡도: O(1)
4+
* @param {string} s
5+
* @return {boolean}
6+
*/
7+
const isPalindrome = function (s) {
8+
const parsedString = s
9+
.trim()
10+
.replace(" ", "")
11+
.replace(/[^a-zA-Z0-9]/g, "")
12+
.toLowerCase();
13+
14+
let left = 0;
15+
let right = parsedString.length - 1;
16+
17+
while (left < right) {
18+
if (parsedString[left] !== parsedString[right]) {
19+
return false;
20+
}
21+
22+
left += 1;
23+
right -= 1;
24+
}
25+
26+
return true;
27+
};

0 commit comments

Comments
 (0)