Skip to content

[byol-han] WEEK 13 solutions #1613

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Jun 28, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 33 additions & 0 deletions insert-interval/byol-han.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
/**
* https://leetcode.com/problems/insert-interval/submissions/1678158074/
* @param {number[][]} intervals
* @param {number[]} newInterval
* @return {number[][]}
*/
var insert = function (intervals, newInterval) {
const result = [];
let i = 0;
const n = intervals.length;

// 1. newInterval보다 끝나는 시점이 먼저인 interval은 그냥 추가
while (i < n && intervals[i][1] < newInterval[0]) {
result.push(intervals[i]);
i++;
}

// 2. newInterval과 겹치는 interval은 병합
while (i < n && intervals[i][0] <= newInterval[1]) {
newInterval[0] = Math.min(newInterval[0], intervals[i][0]);
newInterval[1] = Math.max(newInterval[1], intervals[i][1]);
i++;
}
result.push(newInterval);

// 3. 나머지 interval은 그대로 추가
while (i < n) {
result.push(intervals[i]);
i++;
}

return result;
};
32 changes: 32 additions & 0 deletions kth-smallest-element-in-a-bst/byol-han.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
/**
* https://leetcode.com/problems/kth-smallest-element-in-a-bst/
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} root
* @param {number} k
* @return {number}
*/
var kthSmallest = function (root, k) {
// 중위 순회 결과를 저장할 배열
const inorder = [];

// 중위 순회 함수 정의
function traverse(node) {
if (!node) return;
traverse(node.left); // 왼쪽 서브트리 방문
inorder.push(node.val); // 현재 노드 값 추가
traverse(node.right); // 오른쪽 서브트리 방문
}

// 트리 순회 시작
traverse(root);

// k번째로 작은 값 반환 (1-indexed 이므로 k-1)
return inorder[k - 1];
};
35 changes: 35 additions & 0 deletions lowest-common-ancestor-of-a-binary-search-tree/byol-han.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
/**
* https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-search-tree/
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/

/**
* @param {TreeNode} root
* @param {TreeNode} p
* @param {TreeNode} q
* @return {TreeNode}
*/
var lowestCommonAncestor = function (root, p, q) {
let current = root;

while (current) {
// 두 노드의 값이 현재 노드보다 모두 작으면 왼쪽 서브트리로 이동
if (p.val < current.val && q.val < current.val) {
current = current.left;
}
// 두 노드의 값이 현재 노드보다 모두 크면 오른쪽 서브트리로 이동
else if (p.val > current.val && q.val > current.val) {
current = current.right;
}
// 현재 노드가 분기점이면 그게 LCA!
else {
return current;
}
}

return null; // 만약 트리에 없다면 null 반환 (일반적으로 BST에는 항상 존재한다고 가정)
};
37 changes: 37 additions & 0 deletions meeting-rooms/byol-han.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import { Interval } from '/opt/node/lib/lintcode/index.js';

/**
* https://www.lintcode.com/problem/920/
* Definition of Interval:
* class Interval {
* constructor(start, end) {
* this.start = start;
* this.end = end;
* }
* }
*/

export class Solution {
/**
* @param intervals: an array of meeting time intervals
* @return: if a person could attend all meetings
*/
canAttendMeetings(intervals) {
// 먼저 회의를 시작 시간 기준으로 정렬합니다.
intervals.sort((a, b) => a[0] - b[0]);

// 정렬된 회의들을 순차적으로 비교하며 겹치는지 확인합니다.
for (let i = 1; i < intervals.length; i++) {
const prevEnd = intervals[i - 1][1]; // 이전 회의의 끝 시간
const currStart = intervals[i][0]; // 현재 회의의 시작 시간

// 이전 회의의 끝 시간보다 현재 회의의 시작 시간이 빠르면 겹칩니다.
if (currStart < prevEnd) {
return false;
}
}

// 겹치는 회의가 없으면 true를 반환합니다.
return true;
}
}