Skip to content

Commit cfd4de4

Browse files
authored
Merge pull request #1286 from byol-han/main
[byol-han] WEEK 03 solutions
2 parents fbe9f40 + 15ce53b commit cfd4de4

File tree

5 files changed

+133
-0
lines changed

5 files changed

+133
-0
lines changed

combination-sum/byol-han.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
/**
2+
* @param {number[]} candidates
3+
* @param {number} target
4+
* @return {number[][]}
5+
*/
6+
var combinationSum = function (candidates, target) {
7+
const result = [];
8+
9+
function backtrack(remaining, combination, start) {
10+
if (remaining === 0) {
11+
result.push([...combination]);
12+
return;
13+
}
14+
if (remaining < 0) return;
15+
16+
for (let i = start; i < candidates.length; i++) {
17+
combination.push(candidates[i]);
18+
backtrack(remaining - candidates[i], combination, i); // 같은 숫자 다시 사용 가능
19+
combination.pop(); // backtrack
20+
}
21+
}
22+
23+
backtrack(target, [], 0);
24+
return result;
25+
};

decode-ways/byol-han.js

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
/**
2+
* @param {string} s
3+
* @return {number}
4+
*/
5+
var numDecodings = function (s) {
6+
if (!s || s[0] === "0") return 0;
7+
8+
const n = s.length;
9+
const dp = Array(n + 1).fill(0);
10+
11+
dp[0] = 1; // 빈 문자열은 1가지 방법
12+
dp[1] = 1; // 첫 글자가 0이 아니면 1가지 방법
13+
14+
for (let i = 2; i <= n; i++) {
15+
const oneDigit = parseInt(s.slice(i - 1, i));
16+
const twoDigits = parseInt(s.slice(i - 2, i));
17+
18+
if (oneDigit >= 1 && oneDigit <= 9) {
19+
dp[i] += dp[i - 1];
20+
}
21+
if (twoDigits >= 10 && twoDigits <= 26) {
22+
dp[i] += dp[i - 2];
23+
}
24+
}
25+
26+
return dp[n];
27+
};

maximum-subarray/byol-han.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
/**
2+
* @param {number[]} nums
3+
* @return {number}
4+
*/
5+
var maxSubArray = function (nums) {
6+
// 초기값 설정: 현재까지의 최대합과 전체 최대합을 배열의 첫 번째 값으로 초기화
7+
let currentSum = nums[0];
8+
let maxSum = nums[0];
9+
10+
// 두 번째 원소부터 순회
11+
for (let i = 1; i < nums.length; i++) {
12+
// 이전까지의 합에 현재 원소를 더할지, 아니면 현재 원소부터 새로 시작할지 결정
13+
currentSum = Math.max(nums[i], currentSum + nums[i]);
14+
// 전체 최대값 갱신
15+
maxSum = Math.max(maxSum, currentSum);
16+
}
17+
18+
return maxSum;
19+
};

number-of-1-bits/byol-han.js

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/**
2+
* @param {number} n
3+
* @return {number}
4+
*/
5+
//1. divide the number by 2 and count the remainder
6+
var hammingWeight = function (n) {
7+
let count = 0;
8+
while (n > 0) {
9+
if (n % 2 === 1) {
10+
count++;
11+
}
12+
n = Math.floor(n / 2);
13+
}
14+
return count;
15+
};
16+
17+
//2. Count the number of set bits (1s) in the binary representation of n
18+
var hammingWeight = function (n) {
19+
return n.toString(2).split("1").length - 1;
20+
};
21+
22+
//3. bit manipulation
23+
var hammingWeight = function (n) {
24+
let count = 0;
25+
while (n > 0) {
26+
count += n & 1; // 마지막 비트가 1이면 count++
27+
n = n >>> 1; // 오른쪽으로 한 비트 이동 (2로 나눔)
28+
}
29+
return count;
30+
};

valid-palindrome/byol-han.js

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
/**
2+
* @param {string} s
3+
* @return {boolean}
4+
*/
5+
6+
// 1. Two Pointers
7+
// time complexity: O(n)
8+
// space complexity: O(1)
9+
var isPalindrome = function (s) {
10+
let sRefine = s.toLowerCase().replace(/[^a-z0-9]/g, "");
11+
let left = 0;
12+
let right = sRefine.length - 1;
13+
14+
while (left < right) {
15+
if (sRefine[left] !== sRefine[right]) {
16+
return false;
17+
}
18+
left++;
19+
right--;
20+
}
21+
22+
return true;
23+
};
24+
25+
// 2. String Manipulation
26+
// time complexity: O(n)
27+
// space complexity: O(n)
28+
var isPalindrome = function (s) {
29+
let refined = s.toLowerCase().replace(/[^a-z0-9]/g, "");
30+
let reversed = refined.split("").reverse().join("");
31+
return refined === reversed;
32+
};

0 commit comments

Comments
 (0)