diff --git a/non-overlapping-intervals/byol-han.js b/non-overlapping-intervals/byol-han.js new file mode 100644 index 000000000..ffb8c0af8 --- /dev/null +++ b/non-overlapping-intervals/byol-han.js @@ -0,0 +1,30 @@ +/** + * https://leetcode.com/problems/non-overlapping-intervals/description/ + * @param {number[][]} intervals + * @return {number} + */ +var eraseOverlapIntervals = function (intervals) { + if (intervals.length === 0) return 0; + + // 1. intervals를 end 값을 기준으로 오름차순 정렬 + intervals.sort((a, b) => a[1] - b[1]); + + // 2. 첫 번째 interval의 end 값으로 초기화 + let end = intervals[0][1]; + let count = 0; // 제거해야 하는 interval의 개수 + + // 3. 두 번째 interval부터 순회 + for (let i = 1; i < intervals.length; i++) { + let [start_i, end_i] = intervals[i]; + + if (start_i < end) { + // 현재 interval의 start가 이전 end보다 작으면 overlap + count++; // 이 interval은 제거해야 함 + } else { + // overlap이 없으면 end 갱신 + end = end_i; + } + } + + return count; +}; diff --git a/remove-nth-node-from-end-of-list/byol-han.js b/remove-nth-node-from-end-of-list/byol-han.js new file mode 100644 index 000000000..c69a639dc --- /dev/null +++ b/remove-nth-node-from-end-of-list/byol-han.js @@ -0,0 +1,40 @@ +/** + * https://leetcode.com/problems/remove-nth-node-from-end-of-list/submissions/1672151418/ + * Definition for singly-linked list. + * function ListNode(val, next) { + * this.val = (val===undefined ? 0 : val) + * this.next = (next===undefined ? null : next) + * } + */ +/** + * @param {ListNode} head + * @param {number} n + * @return {ListNode} + */ +var removeNthFromEnd = function (head, n) { + // dummy 노드를 만들어 head 앞에 두기 (edge case: 첫 번째 노드를 제거할 때 편리) + let dummy = new ListNode(0); + dummy.next = head; + + // fast와 slow 포인터를 dummy에서 시작 + let fast = dummy; + let slow = dummy; + + // fast 포인터를 n+1 만큼 앞으로 이동시킴 + // (slow가 제거 노드의 바로 이전 노드에 멈추도록 하기 위함) + for (let i = 0; i < n + 1; i++) { + fast = fast.next; + } + + // fast와 slow를 함께 끝까지 이동 + while (fast !== null) { + fast = fast.next; + slow = slow.next; + } + + // slow.next가 제거할 노드이므로, 그 노드를 skip + slow.next = slow.next.next; + + // dummy.next가 새 head + return dummy.next; +}; diff --git a/same-tree/byol-han.js b/same-tree/byol-han.js index 40b3735fe..d0d0150b2 100644 --- a/same-tree/byol-han.js +++ b/same-tree/byol-han.js @@ -1,4 +1,5 @@ /** + * WEEK12 * https://leetcode.com/problems/same-tree/description/ * Definition for a binary tree node. * function TreeNode(val, left, right) {