From db2fb7748219b00b122f2b710ec37fdbc2e11a9b Mon Sep 17 00:00:00 2001 From: Ju Hwijung Date: Fri, 15 May 2026 23:01:00 +0900 Subject: [PATCH 1/3] =?UTF-8?q?11=EC=A3=BC=EC=B0=A8=20=EB=AC=B8=EC=A0=9C?= =?UTF-8?q?=20=ED=92=80=EC=9D=B4=203=EA=B0=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- graph-valid-tree/hwi-middle.cpp | 47 +++++++++++++++++++++++++++++++++ merge-intervals/hwi-middle.cpp | 39 +++++++++++++++++++++++++++ missing-number/hwi-middle.cpp | 15 +++++++++++ 3 files changed, 101 insertions(+) create mode 100644 graph-valid-tree/hwi-middle.cpp create mode 100644 merge-intervals/hwi-middle.cpp create mode 100644 missing-number/hwi-middle.cpp diff --git a/graph-valid-tree/hwi-middle.cpp b/graph-valid-tree/hwi-middle.cpp new file mode 100644 index 0000000000..a6d1c5b357 --- /dev/null +++ b/graph-valid-tree/hwi-middle.cpp @@ -0,0 +1,47 @@ +class Solution { +public: + bool validTree(int n, vector>& edges) { + vector> adj(n + 1); + vector vis(n + 1); + + for (vector& edge : edges) + { + adj[edge[0]].push_back(edge[1]); + adj[edge[1]].push_back(edge[0]); + } + + // BFS 수행 + int visited = 1; + queue> q; + q.push({0, -1}); + while (!q.empty()) + { + int cur; + int parent; + tie(cur, parent) = q.front(); + q.pop(); + + for (int n : adj[cur]) + { + // 자기가 왔던 노드면 넘어감 + if (n == parent) + { + continue; + } + + // 이미 방문한 노드면 유효하지 않음 + if (vis[n]) + { + return false; + } + + vis[n] = true; + visited++; + q.push({n, cur}); + } + } + + // BFS를 통해 전체 노드를 방문할 수 있었어야 함 + return visited == n; + } +}; diff --git a/merge-intervals/hwi-middle.cpp b/merge-intervals/hwi-middle.cpp new file mode 100644 index 0000000000..40d0b6e3b3 --- /dev/null +++ b/merge-intervals/hwi-middle.cpp @@ -0,0 +1,39 @@ +class Solution { +public: + vector> merge(vector>& intervals) { + // start 순으로 정렬 + sort(intervals.begin(), intervals.end(), + [](const vector& a, const vector& b) { + return a[0] < b[0]; + }); + + vector> res; + res.reserve(intervals.size()); + + int start = intervals[0][0]; + int end = intervals[0][1]; + + for (int i = 1; i < intervals.size(); ++i) + { + // 현재 구간의 end보다 start가 크다면 틈이 벌어진 것 + if (end < intervals[i][0]) + { + vector v = { start, end }; + res.push_back(v); + start = intervals[i][0]; + end = intervals[i][1]; + } + // 그렇지 아니면 합칠 수 있음 + else + { + start = min(start, intervals[i][0]); + end = max(end, intervals[i][1]); + } + } + + vector v = { start, end }; + res.push_back(v); + + return res; + } +}; diff --git a/missing-number/hwi-middle.cpp b/missing-number/hwi-middle.cpp new file mode 100644 index 0000000000..d49ccaf00a --- /dev/null +++ b/missing-number/hwi-middle.cpp @@ -0,0 +1,15 @@ +class Solution { +public: + int missingNumber(vector& nums) { + // 1부터 n까지 합을 구하고, 배열 요소들의 합을 빼서 빠진 수를 찾음 + int n = nums.size(); + int sum = (n * (n + 1)) / 2; + int acc = 0; + for (int num : nums) + { + acc += num; + } + + return sum - acc; + } +}; From 89a94a2eae23d685340148533220fc16eb4914d6 Mon Sep 17 00:00:00 2001 From: Ju Hwijung Date: Sat, 16 May 2026 14:48:29 +0900 Subject: [PATCH 2/3] =?UTF-8?q?11=EC=A3=BC=EC=B0=A8=20=EB=AC=B8=EC=A0=9C?= =?UTF-8?q?=20=ED=92=80=EC=9D=B4=201=EA=B0=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- reorder-list/hwi-middle.cpp | 53 +++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 reorder-list/hwi-middle.cpp diff --git a/reorder-list/hwi-middle.cpp b/reorder-list/hwi-middle.cpp new file mode 100644 index 0000000000..8a2674d0da --- /dev/null +++ b/reorder-list/hwi-middle.cpp @@ -0,0 +1,53 @@ +/** + * Definition for singly-linked list. + * struct ListNode { + * int val; + * ListNode *next; + * ListNode() : val(0), next(nullptr) {} + * ListNode(int x) : val(x), next(nullptr) {} + * ListNode(int x, ListNode *next) : val(x), next(next) {} + * }; + */ + + // Editorial 코드 +class Solution { +public: + void reorderList(ListNode* head) { + if (head == nullptr) + { + return; + } + + ListNode* slow = head; + ListNode* fast = head; + while (fast != nullptr && fast->next != nullptr) + { + slow = slow->next; + fast = fast->next->next; + } + + ListNode* prev = nullptr; + ListNode* curr = slow; + ListNode* tmp; + while (curr != nullptr) + { + tmp = curr->next; + curr->next = prev; + prev = curr; + curr = tmp; + } + + + ListNode* first = head; + ListNode* second = prev; + while (second->next != nullptr) + { + tmp = first->next; + first->next = second; + first = tmp; + tmp = second->next; + second->next = first; + second = tmp; + } + } +}; From 11a86bd5a5ad67d7188220d8d2c5674db0ec2625 Mon Sep 17 00:00:00 2001 From: Ju Hwijung Date: Sat, 16 May 2026 16:43:58 +0900 Subject: [PATCH 3/3] =?UTF-8?q?11=EC=A3=BC=EC=B0=A8=20=EB=AC=B8=EC=A0=9C?= =?UTF-8?q?=20=ED=92=80=EC=9D=B4=201=EA=B0=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- binary-tree-maximum-path-sum/hwi-middle.cpp | 40 +++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 binary-tree-maximum-path-sum/hwi-middle.cpp diff --git a/binary-tree-maximum-path-sum/hwi-middle.cpp b/binary-tree-maximum-path-sum/hwi-middle.cpp new file mode 100644 index 0000000000..54180ebfee --- /dev/null +++ b/binary-tree-maximum-path-sum/hwi-middle.cpp @@ -0,0 +1,40 @@ +/** + * Definition for a binary tree node. + * struct TreeNode { + * int val; + * TreeNode *left; + * TreeNode *right; + * TreeNode() : val(0), left(nullptr), right(nullptr) {} + * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} + * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} + * }; + */ +class Solution { +public: + int maxPathSum(TreeNode* root) { + int ans = -1000; + impl(root, ans); + return ans; + } + +private: + int impl(TreeNode* root, int& ans) + { + if (root == nullptr) + { + return 0; + } + + // 왼쪽과 오른쪽 자식을 재귀적으로 순회 + int l = impl(root->left, ans); + int r = impl(root->right, ans); + int cur = root->val; + + // 최댓값 업데이트 + ans = max(ans, max(0, l) + max(0, r) + cur); + + // 부모에게 전달할 값 + // -> 재방문이 허용되지 않으므로 최댓값과는 다름 + return max(0, max(l, r) + cur); + } +};