Skip to content

Commit 052d8b1

Browse files
authored
Merge pull request #545 from wogha95/main
[재호] WEEK 11 Solutions
2 parents a33606f + 46a14fe commit 052d8b1

File tree

3 files changed

+165
-0
lines changed

3 files changed

+165
-0
lines changed

insert-interval/wogha95.js

+63
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
/**
2+
* TC: O(N)
3+
* 1번에서 N만큼 순회
4+
* 2번에서 최대 N만큼 순회
5+
*
6+
* SC: O(1)
7+
* 겹치는 interval의 시작, 끝 index를 저장하는 변수만 사용
8+
*
9+
* N: intervals.length
10+
*/
11+
12+
/**
13+
* @param {number[][]} intervals
14+
* @param {number[]} newInterval
15+
* @return {number[][]}
16+
*/
17+
var insert = function (intervals, newInterval) {
18+
if (intervals.length === 0) {
19+
return [newInterval];
20+
}
21+
if (newInterval[1] < intervals[0][0]) {
22+
return [newInterval, ...intervals];
23+
}
24+
if (intervals[intervals.length - 1][1] < newInterval[0]) {
25+
return [...intervals, newInterval];
26+
}
27+
28+
// 1. 겹치는 interval의 시작, 끝 index를 구한다.
29+
let overLappingStartIndex = intervals.length - 1;
30+
let overLappingEndIndex = 0;
31+
for (let index = 0; index < intervals.length; index++) {
32+
const interval = intervals[index];
33+
if (newInterval[0] <= interval[1]) {
34+
overLappingStartIndex = Math.min(overLappingStartIndex, index);
35+
}
36+
if (interval[0] <= newInterval[1]) {
37+
overLappingEndIndex = Math.max(overLappingEndIndex, index);
38+
}
39+
}
40+
41+
// 2.
42+
// 시작index 전까지 모두 추가하고
43+
// 시작index, 끝index의 최대 범위 interval을 추가하고
44+
// 끝index 이후 interval을 모두 추가한다.
45+
const result = [];
46+
for (let index = 0; index < overLappingStartIndex; index++) {
47+
result.push(intervals[index]);
48+
}
49+
const overLappedStart = Math.min(
50+
intervals[overLappingStartIndex][0],
51+
newInterval[0]
52+
);
53+
const overLappedEnd = Math.max(
54+
intervals[overLappingEndIndex][1],
55+
newInterval[1]
56+
);
57+
result.push([overLappedStart, overLappedEnd]);
58+
for (let index = overLappingEndIndex + 1; index < intervals.length; index++) {
59+
result.push(intervals[index]);
60+
}
61+
62+
return result;
63+
};
+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
/**
2+
* TC: O(N)
3+
* 모든 노드를 순회합니다.
4+
*
5+
* SC: O(N)
6+
* 노드의 수에 비례해서 queue의 길이가 증가됩니다.
7+
*
8+
* N: count of tree node
9+
*/
10+
11+
/**
12+
* Definition for a binary tree node.
13+
* function TreeNode(val, left, right) {
14+
* this.val = (val===undefined ? 0 : val)
15+
* this.left = (left===undefined ? null : left)
16+
* this.right = (right===undefined ? null : right)
17+
* }
18+
*/
19+
/**
20+
* @param {TreeNode} root
21+
* @return {number}
22+
*/
23+
var maxDepth = function (root) {
24+
let maximumDepth = 0;
25+
26+
const queue = [[root, 1]];
27+
while (queue.length > 0) {
28+
const [current, depth] = queue.shift();
29+
30+
if (current === null) {
31+
break;
32+
}
33+
34+
maximumDepth = Math.max(maximumDepth, depth);
35+
36+
if (current.left) {
37+
queue.push([current.left, depth + 1]);
38+
}
39+
40+
if (current.right) {
41+
queue.push([current.right, depth + 1]);
42+
}
43+
}
44+
45+
return maximumDepth;
46+
};

reorder-list/wogha95.js

+56
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
/**
2+
* TC: O(N)
3+
* 1번에서 절반 길이만큼 순회
4+
* 2번에서 절반 길이만큼 순회
5+
* 3번에서 절반 길이만큼 순회
6+
*
7+
* SC: O(1)
8+
* linked list의 node를 가리키는 포인터를 가지고 활용하므로 linked list의 길이와 무관한 공간 복잡도를 갖습니다.
9+
*
10+
* N: linked list length
11+
*/
12+
13+
/**
14+
* Definition for singly-linked list.
15+
* function ListNode(val, next) {
16+
* this.val = (val===undefined ? 0 : val)
17+
* this.next = (next===undefined ? null : next)
18+
* }
19+
*/
20+
/**
21+
* @param {ListNode} head
22+
* @return {void} Do not return anything, modify head in-place instead.
23+
*/
24+
var reorderList = function (head) {
25+
// 1. linked list 절반 위치 구하기
26+
let slow = head;
27+
let fast = head;
28+
29+
while (fast && fast.next) {
30+
slow = slow.next;
31+
fast = fast.next.next;
32+
}
33+
34+
// 2. 후반 linked list 순서 뒤집기
35+
let halfStartTemp = slow.next;
36+
let halfStart = null;
37+
// 절반을 기준으로 linked list 끊기
38+
slow.next = null;
39+
40+
while (halfStartTemp) {
41+
const temp = halfStartTemp.next;
42+
halfStartTemp.next = halfStart;
43+
halfStart = halfStartTemp;
44+
halfStartTemp = temp;
45+
}
46+
47+
// 3. 두 리스트 합치기
48+
while (head && halfStart) {
49+
const headTemp = head.next;
50+
const halfStartTemp = halfStart.next;
51+
head.next = halfStart;
52+
halfStart.next = headTemp;
53+
head = headTemp;
54+
halfStart = halfStartTemp;
55+
}
56+
};

0 commit comments

Comments
 (0)