Skip to content

Commit 4efc0de

Browse files
authored
Merge pull request #1071 from YeomChaeeun/main
[YeomChaeeun] Week 13
2 parents 0fa58c9 + c254aa9 commit 4efc0de

File tree

3 files changed

+119
-0
lines changed

3 files changed

+119
-0
lines changed

insert-interval/YeomChaeeun.ts

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
/**
2+
* 중간에 새로운 구간 추가하기
3+
* 알고리즘 복잡도
4+
* - 시간 복잡도: O(n)
5+
* - 공간 복잡도: O(n)
6+
* @param intervals
7+
* @param newInterval
8+
*/
9+
function insert(intervals: number[][], newInterval: number[]): number[][] {
10+
if(intervals.length === 0) return [newInterval]
11+
let result: number[][] = []
12+
13+
let i = 0;
14+
15+
// 1. newIntervals 이전 구간 추가
16+
while(i < intervals.length && intervals[i][1] < newInterval[0]) {
17+
result.push(intervals[i])
18+
i++
19+
}
20+
21+
// 2. 겹치는 부분 추가
22+
const merged = [...newInterval]
23+
while(i < intervals.length && intervals[i][0] <= newInterval[1]) {
24+
merged[0] = Math.min(merged[0], intervals[i][0])
25+
merged[1] = Math.max(merged[1], intervals[i][1])
26+
i++
27+
}
28+
result.push(merged)
29+
30+
// 3. 이후의 구간 추가
31+
while(i < intervals.length) {
32+
result.push(intervals[i])
33+
i++
34+
}
35+
36+
return result
37+
}
38+
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* class TreeNode {
4+
* val: number
5+
* left: TreeNode | null
6+
* right: TreeNode | null
7+
* constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
8+
* this.val = (val===undefined ? 0 : val)
9+
* this.left = (left===undefined ? null : left)
10+
* this.right = (right===undefined ? null : right)
11+
* }
12+
* }
13+
*/
14+
/**
15+
* Binary Search Tree 특성을 고려하여 k번째 작은 숫자를 찾기
16+
* 알고리즘 복잡도
17+
* - 시간 복잡도: O(n)
18+
* - 공간 복잡도: O(n)
19+
*/
20+
function kthSmallest(root: TreeNode | null, k: number): number {
21+
let count = 0;
22+
let result = 0;
23+
24+
/*
25+
BST의 특성
26+
- 왼쪽 서브트리의 노드 값 < 현재 노드 값
27+
- 현재 노드값 < 왼쪽 서브트리의 노드 값
28+
=> 중위 순회시 오름차 순 방문
29+
*/
30+
31+
// 중위 순회 함수
32+
function inorder(node: TreeNode | null): void {
33+
if (node === null) return;
34+
inorder(node.left);
35+
36+
count++;
37+
if (count === k) {
38+
result = node.val;
39+
return;
40+
}
41+
42+
inorder(node.right);
43+
}
44+
45+
inorder(root);
46+
return result;
47+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* class TreeNode {
4+
* val: number
5+
* left: TreeNode | null
6+
* right: TreeNode | null
7+
* constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
8+
* this.val = (val===undefined ? 0 : val)
9+
* this.left = (left===undefined ? null : left)
10+
* this.right = (right===undefined ? null : right)
11+
* }
12+
* }
13+
*/
14+
/**
15+
* BST 이진트리에 두 노드가 주어졌을 때, 근접한 부모 찾기
16+
* 알고리즘 복잡도
17+
* - 시간 복잡도: O(n)
18+
* - 공간 복잡도: O(n)
19+
* @param root
20+
* @param p
21+
* @param q
22+
*/
23+
function lowestCommonAncestor(root: TreeNode | null, p: TreeNode | null, q: TreeNode | null): TreeNode | null {
24+
if(root === null || p === null || q === null) return null;
25+
26+
if(p.val < root.val && q.val < root.val) {
27+
return lowestCommonAncestor(root.left, p, q)
28+
} else if(p.val > root.val && q.val > root.val) {
29+
return lowestCommonAncestor(root.right, p, q)
30+
} else {
31+
// 현재 노드가 양쪽 방향으로 있거나 현재 노드가 p, q인 경우
32+
return root
33+
}
34+
}

0 commit comments

Comments
 (0)