Skip to content

Commit 26f5227

Browse files
authored
Merge pull request #2049 from yuhyeon99/main
[yuhyeon99] WEEK 02 solutions
2 parents c0070c9 + 18f4003 commit 26f5227

File tree

5 files changed

+136
-0
lines changed

5 files changed

+136
-0
lines changed

3sum/yuhyeon99.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
/**
2+
* @param {number[]} nums
3+
* @return {number[][]}
4+
*/
5+
var threeSum = function(nums) {
6+
var answer = new Set();
7+
nums.sort((a, b) => a - b);
8+
9+
for(let i = 0; i < nums.length - 2; i ++) {
10+
if (i > 0 && nums[i] === nums[i - 1]) continue;
11+
12+
let usedNumSet = new Set();
13+
for(let j = i + 1; j < nums.length; j ++) {
14+
let target = -(nums[i] + nums[j]);
15+
16+
if(usedNumSet.has(target)) {
17+
let triplets = [nums[i], nums[j], target].sort((a, b) => a - b);
18+
answer.add(triplets.join(','));
19+
}
20+
21+
usedNumSet.add(nums[j]);
22+
}
23+
}
24+
25+
return [...answer].map(e => e.split(',').map(Number));
26+
};

climbing-stairs/yuhyeon99.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
/**
2+
* @param {number} n
3+
* @return {number}
4+
*/
5+
var climbStairs = function(n) {
6+
// 피보나치 수열을 활용해서 정답을 풀어야할까?
7+
// 피보나치 수열이란: F(n) = F(n - 1) + F(n - 2);
8+
// 반환 조건은 n이 1또는 0일 때 해당 수를 반환할 수 있음
9+
// 이 문제에서는 2 계단 오르는 상황을 포함시켜야해서 n 이 2일 때 2를 반환하도록 설정
10+
// 근데 이제 시간초과가 발생해서 캐싱 해줘야함.
11+
var cache = { '0': 0, '1': 1, '2': 2 };
12+
13+
var fibo = (n) => {
14+
let result = 0;
15+
16+
if (typeof(cache[n]) === 'number') {
17+
result = cache[n];
18+
} else {
19+
result = cache[n] = fibo(n - 1) + fibo(n - 2);
20+
}
21+
22+
return result;
23+
};
24+
25+
return fibo(n);
26+
};
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
/**
2+
* @param {number[]} nums
3+
* @return {number[]}
4+
*/
5+
var productExceptSelf = function(nums) {
6+
const n = nums.length;
7+
const result = new Array(n);
8+
9+
result[0] = 1;
10+
for (let i = 1; i < n; i++) {
11+
result[i] = result[i - 1] * nums[i - 1];
12+
}
13+
14+
let rightProduct = 1;
15+
for (let i = n - 1; i >= 0; i--) {
16+
result[i] *= rightProduct;
17+
rightProduct *= nums[i];
18+
}
19+
20+
return result;
21+
};

valid-anagram/yuhyeon99.js

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
/**
2+
* 2 개의 문자열 s와 t가 주어진다. 만약 t가 s의 anagram일 경우 true를 반환하고 그렇지 않은 경우 false를 반환하는 함수
3+
* @param {string} s
4+
* @param {string} t
5+
* @return {boolean}
6+
*/
7+
var isAnagram = function(s, t) {
8+
var sMap = new Map();
9+
var tMap = new Map();
10+
11+
for(let e of [...s]) {
12+
if(sMap.has(e)) {
13+
sMap.set(e, sMap.get(e) + 1);
14+
} else {
15+
sMap.set(e, 1);
16+
}
17+
}
18+
19+
for(let e of [...t]) {
20+
if(tMap.has(e)) {
21+
tMap.set(e, tMap.get(e) + 1);
22+
} else {
23+
tMap.set(e, 1);
24+
}
25+
}
26+
27+
if(sMap.size > tMap.size) {
28+
for(let s of sMap) {
29+
if(tMap.get(s[0]) && tMap.get(s[0]) === s[1]) continue;
30+
return false;
31+
}
32+
} else {
33+
for(let t of tMap) {
34+
if(sMap.get(t[0]) && sMap.get(t[0]) === t[1]) continue;
35+
return false;
36+
}
37+
}
38+
39+
return true;
40+
};
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* function TreeNode(val, left, right) {
4+
* this.val = (val===undefined ? 0 : val)
5+
* this.left = (left===undefined ? null : left)
6+
* this.right = (right===undefined ? null : right)
7+
* }
8+
*/
9+
/**
10+
* @param {TreeNode} root
11+
* @return {boolean}
12+
*/
13+
var isValidBST = function(root) {
14+
function dfs(node, low, high) {
15+
if(!node) return true;
16+
17+
if(!(low < node.val && node.val < high)) return false;
18+
19+
return dfs(node.left, low, node.val) && dfs(node.right, node.val, high);
20+
}
21+
22+
return dfs(root, -Infinity, Infinity);
23+
};

0 commit comments

Comments
 (0)