From 909f08fac65e2b402b3e157175bcaa5f02ecab73 Mon Sep 17 00:00:00 2001 From: byol-han Date: Sun, 22 Jun 2025 21:08:53 -0700 Subject: [PATCH 1/4] meeting rooms solution --- meeting-rooms/byol-han.js | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 meeting-rooms/byol-han.js diff --git a/meeting-rooms/byol-han.js b/meeting-rooms/byol-han.js new file mode 100644 index 000000000..c125a7723 --- /dev/null +++ b/meeting-rooms/byol-han.js @@ -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; + } +} From 1cb8871ee1959cdee9d9340b354954e95d7e6b90 Mon Sep 17 00:00:00 2001 From: byol-han Date: Fri, 27 Jun 2025 02:44:09 -0700 Subject: [PATCH 2/4] lowest-common-ancestor-of-a-binary-search-tree solution --- .../byol-han.js | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 lowest-common-ancestor-of-a-binary-search-tree/byol-han.js diff --git a/lowest-common-ancestor-of-a-binary-search-tree/byol-han.js b/lowest-common-ancestor-of-a-binary-search-tree/byol-han.js new file mode 100644 index 000000000..3667cf122 --- /dev/null +++ b/lowest-common-ancestor-of-a-binary-search-tree/byol-han.js @@ -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에는 항상 존재한다고 가정) +}; From b254839d28cc894a43a94911b585098793edfcaf Mon Sep 17 00:00:00 2001 From: byol-han Date: Fri, 27 Jun 2025 02:47:29 -0700 Subject: [PATCH 3/4] kth-smallest-element-in-a-bst --- kth-smallest-element-in-a-bst/byol-han.js | 32 +++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 kth-smallest-element-in-a-bst/byol-han.js diff --git a/kth-smallest-element-in-a-bst/byol-han.js b/kth-smallest-element-in-a-bst/byol-han.js new file mode 100644 index 000000000..50ff0bcfa --- /dev/null +++ b/kth-smallest-element-in-a-bst/byol-han.js @@ -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]; +}; From fbcc68af7019ddd150832c8dc909be4acbbb9c2b Mon Sep 17 00:00:00 2001 From: byol-han Date: Fri, 27 Jun 2025 02:49:48 -0700 Subject: [PATCH 4/4] insert-interval solution --- insert-interval/byol-han.js | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 insert-interval/byol-han.js diff --git a/insert-interval/byol-han.js b/insert-interval/byol-han.js new file mode 100644 index 000000000..6d7a5ccd5 --- /dev/null +++ b/insert-interval/byol-han.js @@ -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; +};