Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit e4ac6b1

Browse files
authoredNov 10, 2024
Merge pull request #579 from Sunjae95/main
[선재] Week13
2 parents 5ca8ce3 + c014422 commit e4ac6b1

File tree

3 files changed

+85
-0
lines changed

3 files changed

+85
-0
lines changed
 

‎house-robber/sunjae95.js

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
/**
2+
* @description
3+
* 최대한 많은 양의 돈이라는 문구에서 dynamic programming을 연상
4+
* 연속된 집은 털 수 없다라는 문구에서 점화식을 도출 할 수 있었음
5+
*
6+
* n = length of nums
7+
* time complexity: O(n)
8+
* space complexity: O(n)
9+
*/
10+
var rob = function (nums) {
11+
if (nums.length === 1) return nums[0];
12+
13+
const dp = Array(nums.length).fill(0);
14+
15+
dp[0] = nums[0];
16+
dp[1] = Math.max(nums[1], dp[0]);
17+
18+
for (let i = 2; i < nums.length; i++)
19+
dp[i] = Math.max(dp[i - 2] + nums[i], dp[i - 1]);
20+
21+
return dp[nums.length - 1];
22+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
/**
2+
* @description
3+
* bfs, dfs와 같은 순회 방법과 treeNode 구조에 child가 아닌 parent라는 속성을 부여해 부모찾기를 아이디어로 접근
4+
* 하지만 모든 노드를 순회해야하고 p와 q가 속한지점과 둘이 포함하는 관계인지를 중점으로 문제에 접근함
5+
* 그 결과 postOrder를 생각하게 되어 문제 풀이
6+
*
7+
* n = length of total treeNode
8+
* time complexity: O(n)
9+
* space complexity: O(n)
10+
*/
11+
var lowestCommonAncestor = function (root, p, q) {
12+
let answer = null;
13+
14+
const postOrder = (tree) => {
15+
if (tree === null) return [false, false];
16+
17+
const [hasLeftP, hasLeftQ] = postOrder(tree.left);
18+
const [hasRightP, hasRightQ] = postOrder(tree.right);
19+
20+
const hasP = hasLeftP || hasRightP || tree.val === p.val;
21+
const hasQ = hasLeftQ || hasRightQ || tree.val === q.val;
22+
23+
if (hasP && hasQ && answer === null) answer = tree;
24+
25+
return [hasP, hasQ];
26+
};
27+
28+
postOrder(root);
29+
30+
return answer;
31+
};

‎non-overlapping-intervals/sunjae95.js

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
/**
2+
* @description
3+
* overlapping이 안되기위한 기준이 필요함을 느낌
4+
* 처음에는 시작점, 끝점을 기준으로 정렬했지만 16번 테스트에서 실패
5+
* 정렬기준이 끝점, 시작점 순으로 정렬해야한다고 깨닫게 됨
6+
*
7+
* n = length of intervals
8+
* time complexity: O(n log n)
9+
* space complexity: O(n)
10+
*/
11+
var eraseOverlapIntervals = function (intervals) {
12+
intervals.sort((a, b) => {
13+
if (a[1] !== b[1]) return a[1] - b[1];
14+
if (a[0] !== b[0]) return b[0] - a[0];
15+
return 0;
16+
});
17+
18+
let answer = 0;
19+
const current = intervals[0];
20+
21+
for (let i = 1; i < intervals.length; i++) {
22+
const [start, end] = intervals[i];
23+
24+
if (current[1] > start) answer++;
25+
else {
26+
current[0] = start;
27+
current[1] = end;
28+
}
29+
}
30+
31+
return answer;
32+
};

0 commit comments

Comments
 (0)
Please sign in to comment.