Skip to content
Merged
Show file tree
Hide file tree
Changes from 7 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
36 changes: 36 additions & 0 deletions binary-tree-maximum-path-sum/jdy8739.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
/**
* 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
* @return {number}
*/
var maxPathSum = function(root) {
let max = root.val;

const dfs = (node) => {
if (!node) {
return 0;
}

const left = Math.max(dfs(node.left), 0);
const right = Math.max(dfs(node.right), 0);
const sum = node.val + left + right;

max = Math.max(sum, max);

return node.val + Math.max(left, right);
}

dfs(root);

return max;
};

// 시간복잡도 O(n) -> 트리의 모든 노드를 재귀적으로 탐색하므로 복잡도는 노드의 수와 비례함
// 공간복잡도 O(1) -> 입력된 트리와 관련하여 특별하게 사용되는 배열이나 객체가 없음
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

재귀 스택으로 인해 O(n), 혹은 O(h)에 해당하는 공간을 사용할 것 같아요!

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

아하 맞네요! 재귀 스택에 대한 생각을 깜빡했습니다. 코멘트 감사합니다! :)

32 changes: 32 additions & 0 deletions maximum-depth-of-binary-tree/jdy8739.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
/**
* 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
* @return {number}
*/
var maxDepth = function (root) {
let max = 0;

const dfs = (node, depth) => {
if (node) {
dfs(node.left, depth + 1);
dfs(node.right, depth + 1);
} else { // when this node is null
max = Math.max(max, depth);
}
}

dfs(root, 0);

return max;
};

// 시간복잡도 O(n) -> 트리의 모든 노드를 방문하면서 총 노드의 갯수인 n개 만큼의 시간복잡도를 가지게 되므로
// 공간복잡도 O(h) -> 콜스택의 최대 길이는 트리의 깊이와 동일하므로

26 changes: 26 additions & 0 deletions merge-intervals/jdy8739.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
/**
* @param {number[][]} intervals
* @return {number[][]}
*/
var merge = function (intervals) {
const sort = intervals.sort((a, b) => a[0] - b[0]);

const arr = [sort[0]];

for (let i = 1; i < sort.length; i++) {
const endOfArr = arr[arr.length - 1][1];

const next = sort[i][0];

if (endOfArr < next) {
arr.push(sort[i]);
} else {
arr[arr.length - 1][1] = Math.max(arr[arr.length - 1][1], sort[i][1]);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

arr[arr.length - 1][1]라는 값이 반복 사용되는데, 이게 원시값이다 보니 이렇게 반복 사용되는 것 같아요.
arr[arr.length - 1]를 변수로 할당해서 사용하시면 좀 더 간소화 가능하지 않을까요?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

배열 마지막 인덱스의 원소인 배열을 변수에 저장하고 참조하면 더 읽기 쉬운 코드가 될 것 같네요! 코멘트 감사합니다~

}
}

return arr;
};

// 시간복잡도 O(nlogn) -> sort 함수의 시간복잡도가 O(nlogn)이기 때문에
// 공간복잡도 O(n) -> intervals 배열을 정렬하여 arr이라는 식별자의 배열을 만들어야 하기 때문에 필요한 공간
54 changes: 54 additions & 0 deletions reorder-list/jdy8739.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
/**
* Definition for singly-linked list.
* function ListNode(val, next) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
*/
/**
* @param {ListNode} head
* @return {void} Do not return anything, modify head in-place instead.
*/
var reorderList = function (head) {
if (!head) {
return null;
}

const stack = [];

let node = head;

while (node) {
stack.push(node);
node = node.next;
}

const length = stack.length;

node = head;
let count = 0;

while (count < length) {
if (count % 2 === 0) {
const top = stack.pop();

top.next = node.next;

node.next = top;
}

if (count === length - 1) {
node.next = null;
} else {
node = node.next;
}

count++;
}


return head;
};

// 시간복잡도 O(n) -> while문이 링크드리스트의 길이만큼 순회를하기때문에 링크드리스트의 길이만큼 시간이 걸림
// 공간복잡도 O(n) -> 스택에 모든 노드를 저장하기 때문에 링크드리스트의 길이만큼 공간이 필요
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

지금 풀이도 충분히 좋습니다!
하지만 아무래도 링크드 리스트에 대한 조작 문제이고, 아직 여유 시간도 좀 더 있는 만큼 runner를 사용한 풀이도 한번 시도해보시면 어떨까요?
공간 복잡도를 O(1)으로 줄일 수도 있으니까요!