Skip to content

Commit fa576c0

Browse files
authored
Merge pull request #1084 from Yjason-K/main
[gomgom22] Week13
2 parents e90e67f + 6d2167b commit fa576c0

File tree

4 files changed

+158
-0
lines changed

4 files changed

+158
-0
lines changed

β€Žinsert-interval/Yjason-K.ts

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/**
2+
* μƒˆλ‘œμš΄ interval을 κΈ°μ‘΄ intervals 배열에 μ‚½μž…ν•˜κ³  κ²ΉμΉ˜λŠ” ꡬ간을 λ³‘ν•©ν•˜μ—¬ λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜
3+
* @param {number[][]} intervals - κΈ°μ‘΄ interval λ°°μ—΄
4+
* @param {number[]} newInterval - μΆ”κ°€ν•˜λ €λŠ” interval
5+
* @returns {number[][]} - μƒˆλ‘œμš΄ interval을 μΆ”κ°€ν•˜κ³  λ³‘ν•©ν•œ λ°°μ—΄
6+
*
7+
* μ‹œκ°„λ³΅μž‘λ„ : O(n)
8+
* - intervals 배열을 μˆœνšŒν•˜λ©΄μ„œ newIntervalκ³Ό κ²ΉμΉ˜λŠ” ꡬ간을 μ°Ύμ•„ 병합
9+
*
10+
* κ³΅κ°„λ³΅μž‘λ„ : O(n)
11+
* - κ²°κ³Όλ₯Ό μ €μž₯ν•˜κΈ° μœ„ν•œ 배열을 생성.
12+
*/
13+
function insert(intervals: number[][], newInterval: number[]): number[][] {
14+
// κ²°κ³Ό 배열을 newInterval ν•˜λ‚˜λ§Œ κ°€μ§„ λ°°μ—΄λ‘œ μ‹œμž‘
15+
const result: number[][] = [newInterval];
16+
17+
for (let i = 0; i < intervals.length; i++) {
18+
const newItem = intervals[i];
19+
const lastItem = result.pop()!;
20+
21+
// ν˜„μž¬ ꡬ간이 lastItem κ΅¬κ°„μ˜ μ™Όμͺ½μ— μ™„μ „νžˆ μœ„μΉ˜ν•˜λŠ” 경우
22+
if (newItem[1] < lastItem[0]) {
23+
result.push(newItem);
24+
result.push(lastItem);
25+
}
26+
// ν˜„μž¬ ꡬ간이 lastItem κ΅¬κ°„μ˜ 였λ₯Έμͺ½μ— μ™„μ „νžˆ μœ„μΉ˜ν•˜λŠ” 경우
27+
else if (newItem[0] > lastItem[1]) {
28+
result.push(lastItem);
29+
result.push(newItem);
30+
}
31+
// 두 ꡬ간이 κ²ΉμΉ˜λŠ” 경우: λ³‘ν•©ν•˜μ—¬ ν•˜λ‚˜μ˜ κ΅¬κ°„μœΌλ‘œ 병합
32+
else {
33+
lastItem[0] = Math.min(lastItem[0], newItem[0]);
34+
lastItem[1] = Math.max(lastItem[1], newItem[1]);
35+
result.push(lastItem);
36+
}
37+
}
38+
39+
return result;
40+
}
41+
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
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+
/**
16+
* 이진 탐색 트리(BST)μ—μ„œ k번째둜 μž‘μ€ 값을 μ°ΎλŠ” ν•¨μˆ˜
17+
* @param {TreeNode | null} root - 이진 탐색 트리의 루트 λ…Έλ“œ
18+
* @param {number} k - 찾고자 ν•˜λŠ” k번째 κ°’
19+
* @returns {number} - k번째둜 μž‘μ€ κ°’
20+
*
21+
* μ‹œκ°„λ³΅μž‘λ„ : O(n)
22+
* - μ΅œμ•…μ˜ 경우 트리의 λͺ¨λ“  λ…Έλ“œλ₯Ό λ°©λ¬Έν•΄μ•Ό ν•˜λ―€λ‘œ λͺ¨λ“  λ…Έλ“œλ₯Ό 탐색
23+
*
24+
* κ³΅κ°„λ³΅μž‘λ„ : O(n)
25+
* - dfs 탐색을 ν•˜λ©° μ΅œλŒ€ O(n) 곡간이 μ‚¬μš©λ  수 있음.
26+
*/
27+
function kthSmallest(root: TreeNode | null, k: number): number {
28+
// dfs 탐색을 톡해 μ˜€λ¦„μ°¨μˆœμœΌλ‘œ tree 값듀이 μ €μž₯될 λ°°μ—΄
29+
const values: number[] = [];
30+
31+
// dfs 탐색 ν•˜λ©΄ tree κ°’ μΆ”κ°€
32+
const dfs = (tree: TreeNode | null): void => {
33+
if (!tree) return;
34+
35+
// μ™Όμͺ½ μ„œλΈŒνŠΈλ¦¬ 탐색
36+
dfs(tree.left);
37+
// ν˜„μž¬ λ…Έλ“œμ˜ κ°’ μ €μž₯
38+
values.push(tree.val);
39+
// 였λ₯Έμͺ½ μ„œλΈŒνŠΈλ¦¬ 탐색
40+
dfs(tree.right);
41+
};
42+
43+
// νƒμƒ‰ν•˜λ©° μ˜€λ¦„μ°¨μˆœ μ •λ ¬
44+
dfs(root);
45+
46+
// μ •λ ¬λœ λ°°μ—΄μ—μ„œ k-1 번째 κ°’ λ°˜ν™˜
47+
return values[k - 1];
48+
}
49+
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
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+
/**
16+
* 이진 탐색 트리(BST)μ—μ„œ 두 λ…Έλ“œμ˜ μ΅œμ†Œ 곡톡 쑰상을 μ°ΎλŠ” ν•¨μˆ˜
17+
*
18+
* @param {TreeNode | null} root - 이진 탐색 트리의 루트 λ…Έλ“œ
19+
* @param {TreeNode | null} p - 비ꡐ할 첫 번째 λ…Έλ“œ
20+
* @param {TreeNode | null} q - 비ꡐ할 두 번째 λ…Έλ“œ
21+
* @returns {TreeNode | null} - 두 λ…Έλ“œμ˜ μ΅œμ†Œ 곡톡 쑰상 (LCA)
22+
*
23+
* μ‹œκ°„λ³΅μž‘λ„: O(n)
24+
* - μ΅œλŒ€ 트리 높이 만큼 λ…Έλ“œλ₯Ό 탐색해야 함
25+
*
26+
* κ³΅κ°„λ³΅μž‘λ„: O(1)
27+
* - ν˜„μž¬ λ…Έλ“œλ₯Ό μ €μž₯ν•  곡간 ν•„μš”
28+
*/
29+
function lowestCommonAncestor(root: TreeNode | null, p: TreeNode | null, q: TreeNode | null): TreeNode | null {
30+
// ν˜„μž¬ λ…Έλ“œλ₯Ό κΈ°μ€€μœΌλ‘œ p 와 qλ₯Ό 비ꡐ
31+
let curNode = root;
32+
while (curNode !== null) {
33+
// p와 q의 ν˜„μž¬ 값보닀 μž‘μœΌλ©΄ μ™Όμͺ½ μ„œλΈŒ 트리둜 이동
34+
if (p.val < curNode.val && q.val < curNode.val) {
35+
curNode = curNode.left;
36+
} else if (p.val > curNode.val && q.val > curNode.val) {
37+
// p와 q의 ν˜„μž¬ 값보닀 큰 경우 였λ₯Έμͺ½ μ„œλΈŒ 트리둜 이동
38+
curNode = curNode.right;
39+
} else {
40+
// ν˜„μž¬ 값이 p와 q 사이에 μžˆλŠ”κ²½μš°
41+
return curNode;
42+
}
43+
}
44+
};
45+

β€Žmeeting-rooms/Yjason-K.ts

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
/**
2+
* λͺ¨λ“  회의 참석할 수 μžˆλŠ”μ§€ ν™•μΈν•˜λŠ” ν•¨μˆ˜
3+
* @param {number[][]} intervals - [회의 μ‹œμž‘μ‹œκ°„, 회의 μ’…λ£Œμ‹œκ°„] λ°°μ—΄
4+
* @returns {boolean} - 전체 회의 참석 μ—¬λΆ€
5+
*
6+
* μ‹œκ°„ λ³΅μž‘λ„: O(nlogn)
7+
* - λͺ¨λ“  회의 μ‹œκ°„μ„ μ •λ ¬ν•˜λŠ”λ° O(nlogn) μ†Œμš”
8+
*
9+
* 곡간 λ³΅μž‘λ„: O(1)
10+
* - μΆ”κ°€ 곡간 μ‚¬μš© X
11+
*/
12+
function canAttendMeetings(intervals: number[][]): boolean {
13+
// 회의 μ‹œμž‘ μ‹œκ°„ κΈ°μ€€μœΌλ‘œ μ˜€λ¦„μ°¨μˆœ μ •λ ¬
14+
intervals.sort((a,b) => a[0] - b[0]);
15+
16+
for (let i=0; i < intervals.length -1; i++) {
17+
// λ‹€μŒ 회의 λλ‚˜λŠ” μ‹œκ°„μ΄ ν–”μ œ 회의 μ‹œμž‘ μ‹œκ°„λ³΄λ‹€ λΉ λ₯΄λ©΄ false
18+
if (intervals[i][1] > intervals[i+1][0]) return false;
19+
}
20+
21+
return true;
22+
}
23+

0 commit comments

Comments
Β (0)