From e63fc7a193653b2117f58c2635029fef73fe89b1 Mon Sep 17 00:00:00 2001 From: InSange Date: Thu, 1 Aug 2024 02:35:30 +0900 Subject: [PATCH 1/5] 2024-7-31 Filling Bookcase Shelves --- InSange/DP/1105_FillingBookcaseShelves.cpp | 28 ++++++++++++++++++++++ InSange/README.md | 1 + 2 files changed, 29 insertions(+) create mode 100644 InSange/DP/1105_FillingBookcaseShelves.cpp diff --git a/InSange/DP/1105_FillingBookcaseShelves.cpp b/InSange/DP/1105_FillingBookcaseShelves.cpp new file mode 100644 index 0000000..7453ea7 --- /dev/null +++ b/InSange/DP/1105_FillingBookcaseShelves.cpp @@ -0,0 +1,28 @@ +#include + +using namespace std; + +class Solution { +public: + int minHeightShelves(vector>& books, int shelfWidth) { + int arrSize = books.size(); + vector heightArr(arrSize + 1, 0); + + for (int i = 1; i <= arrSize; i++) + { + int width = books[i - 1][0]; + int height = books[i - 1][1]; + + heightArr[i] = heightArr[i - 1] + height; // check Next Floor + for (int j = i - 1; j > 0; j--) + { + if (width + books[j - 1][0] > shelfWidth) break; + width += books[j - 1][0]; // check the same Floor + height = max(height, books[j - 1][1]); // same Floor height compare with before book height + heightArr[i] = min(heightArr[i], heightArr[j - 1] + height); // where make min + } + } + + return heightArr[arrSize]; + } +}; \ No newline at end of file diff --git a/InSange/README.md b/InSange/README.md index 0aa97b7..4d05640 100644 --- a/InSange/README.md +++ b/InSange/README.md @@ -23,6 +23,7 @@ | 19차시 | 2024.07.13 | 스택 | [Crawler Log Folder](https://leetcode.com/problems/reverse-substrings-between-each-pair-of-parentheses/) | [#19](https://github.com/AlgoLeadMe/AlgoLeadMe-8/pull/72)] | 20차시 | 2024.07.17 | 스택 | [Robot Collisions](https://leetcode.com/problems/robot-collisions/) | [#20](https://github.com/AlgoLeadMe/AlgoLeadMe-8/pull/74)] | 21차시 | 2024.07.21 | 그리디 | [Find Valid Matrix Given Row and Column Sums](https://leetcode.com/problems/find-valid-matrix-given-row-and-column-sums/) | [#21](https://github.com/AlgoLeadMe/AlgoLeadMe-8/pull/75)] +| 22차시 | 2024.07.31 | DP | [Filling Bookcase Shelves](https://leetcode.com/problems/filling-bookcase-shelves/) | [#22](https://github.com/AlgoLeadMe/AlgoLeadMe-8/pull/81)] --- https://leetcode.com/problems/robot-collisions/ From d06f6f06e1f1044e15fe0c8dcec2a19f82fc6df0 Mon Sep 17 00:00:00 2001 From: InSange Date: Sat, 3 Aug 2024 21:24:15 +0900 Subject: [PATCH 2/5] 2024-08-03 Minimum Swaps to Group All 1's Together 2 --- InSange/README.md | 1 + ...mum Swaps to Group All 1's Together 2.cpp" | 42 +++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 "InSange/\354\212\254\353\235\274\354\235\264\353\224\251 \354\234\210\353\217\204\354\232\260/2134_Minimum Swaps to Group All 1's Together 2.cpp" diff --git a/InSange/README.md b/InSange/README.md index 4d05640..ec243be 100644 --- a/InSange/README.md +++ b/InSange/README.md @@ -24,6 +24,7 @@ | 20차시 | 2024.07.17 | 스택 | [Robot Collisions](https://leetcode.com/problems/robot-collisions/) | [#20](https://github.com/AlgoLeadMe/AlgoLeadMe-8/pull/74)] | 21차시 | 2024.07.21 | 그리디 | [Find Valid Matrix Given Row and Column Sums](https://leetcode.com/problems/find-valid-matrix-given-row-and-column-sums/) | [#21](https://github.com/AlgoLeadMe/AlgoLeadMe-8/pull/75)] | 22차시 | 2024.07.31 | DP | [Filling Bookcase Shelves](https://leetcode.com/problems/filling-bookcase-shelves/) | [#22](https://github.com/AlgoLeadMe/AlgoLeadMe-8/pull/81)] +| 23차시 | 2024.08.03 | 슬라이딩 윈도우 | [Minimum Swaps to Group All 1's Together 2](https://leetcode.com/problems/minimum-swaps-to-group-all-1s-together-ii/) | [#23](https://github.com/AlgoLeadMe/AlgoLeadMe-8/pull/82)] --- https://leetcode.com/problems/robot-collisions/ diff --git "a/InSange/\354\212\254\353\235\274\354\235\264\353\224\251 \354\234\210\353\217\204\354\232\260/2134_Minimum Swaps to Group All 1's Together 2.cpp" "b/InSange/\354\212\254\353\235\274\354\235\264\353\224\251 \354\234\210\353\217\204\354\232\260/2134_Minimum Swaps to Group All 1's Together 2.cpp" new file mode 100644 index 0000000..22f541d --- /dev/null +++ "b/InSange/\354\212\254\353\235\274\354\235\264\353\224\251 \354\234\210\353\217\204\354\232\260/2134_Minimum Swaps to Group All 1's Together 2.cpp" @@ -0,0 +1,42 @@ +#include + +using namespace std; + +class Solution { +public: + int minSwaps(vector& nums) { + int zeroCnt = minSwapsHelper(nums, 0); + int oneCnt = minSwapsHelper(nums, 1); + + return min(zeroCnt, oneCnt); + } + + int minSwapsHelper(vector& data, int val) { + int numSize = data.size(); + int totalCnt = 0; + + for (int num : data) + { + if (num == val) totalCnt++; + } + + if (totalCnt == 0 || totalCnt == numSize) return 0; + + int start = 0, end = 0; + int maxValCnt = 0, curValCnt = 0; + + while (end < totalCnt) { + if (data[end++] == val) curValCnt++; + } + maxValCnt = max(maxValCnt, curValCnt); + + while (end < numSize) + { + if (data[start++] == val) curValCnt--; + if (data[end++] == val) curValCnt++; + maxValCnt = max(maxValCnt, curValCnt); + } + + return totalCnt - maxValCnt; + } +}; \ No newline at end of file From 843a8613bba5c62310b0e44c61ea453d34f070df Mon Sep 17 00:00:00 2001 From: InSange Date: Mon, 5 Aug 2024 00:57:09 +0900 Subject: [PATCH 3/5] =?UTF-8?q?2024-08-04=20=ED=8A=B8=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- InSange/BFS/1068.cpp | 106 +++++++++++++++++++++++++++++++++++++++++++ InSange/README.md | 1 + 2 files changed, 107 insertions(+) create mode 100644 InSange/BFS/1068.cpp diff --git a/InSange/BFS/1068.cpp b/InSange/BFS/1068.cpp new file mode 100644 index 0000000..c1cefeb --- /dev/null +++ b/InSange/BFS/1068.cpp @@ -0,0 +1,106 @@ +#include +#include +#include + +using namespace std; + +struct Node +{ + Node() + { + parent = nullptr; + leafNode = true; + } + + vector childs; + Node* parent; + bool leafNode; +}; + +vector nodes; +int N, ans = 0, rIndex; + +void NodeUpdate(Node* curNode) +{ + for (auto child : curNode->childs) + { + if (nodes[child] != nullptr) + { + curNode->leafNode = false; + return; + } + } + curNode->leafNode = true; +} + +void Solve() +{ + cin >> N; + + for (int i = 0; i < N; i++) + { + Node* node = new Node(); + + nodes.push_back(node); + } + int root_index = 0; + + for(int i = 0; i < N; i++) + { + int p; + cin >> p; + + if (p == -1) + { + root_index = i; + continue; + } + nodes[i]->parent = nodes[p]; + nodes[i]->parent->childs.push_back(i); + if (nodes[i]->parent) + { + NodeUpdate(nodes[i]->parent); + } + } + + cin >> rIndex; + if (rIndex == root_index) // Ȱ Ʈ + { + cout << ans << "\n"; + return; + } + Node* parentNode = nodes[rIndex]->parent; + delete nodes[rIndex]; + nodes[rIndex] = nullptr; + NodeUpdate(parentNode); + + queue q; + q.push(nodes[root_index]); + + while (!q.empty()) + { + Node* cur = q.front(); + q.pop(); + + if (cur->leafNode) ans++; + for (auto index : cur->childs) + { + if (nodes[index] != nullptr) + { + q.push(nodes[index]); + } + } + } + + cout << ans; +} + +int main() +{ + cin.tie(nullptr); + ios::sync_with_stdio(false); + + Solve(); + + return 0; +} \ No newline at end of file diff --git a/InSange/README.md b/InSange/README.md index ec243be..537b1a9 100644 --- a/InSange/README.md +++ b/InSange/README.md @@ -25,6 +25,7 @@ | 21차시 | 2024.07.21 | 그리디 | [Find Valid Matrix Given Row and Column Sums](https://leetcode.com/problems/find-valid-matrix-given-row-and-column-sums/) | [#21](https://github.com/AlgoLeadMe/AlgoLeadMe-8/pull/75)] | 22차시 | 2024.07.31 | DP | [Filling Bookcase Shelves](https://leetcode.com/problems/filling-bookcase-shelves/) | [#22](https://github.com/AlgoLeadMe/AlgoLeadMe-8/pull/81)] | 23차시 | 2024.08.03 | 슬라이딩 윈도우 | [Minimum Swaps to Group All 1's Together 2](https://leetcode.com/problems/minimum-swaps-to-group-all-1s-together-ii/) | [#23](https://github.com/AlgoLeadMe/AlgoLeadMe-8/pull/82)] +| 24차시 | 2024.08.04 | BFS | [트리](https://www.acmicpc.net/problem/1068) | [#24](https://github.com/AlgoLeadMe/AlgoLeadMe-8/pull/83)] --- https://leetcode.com/problems/robot-collisions/ From 5fd49587d0f6fe7e00e0f87569d00a37b2254bfb Mon Sep 17 00:00:00 2001 From: InSange Date: Sat, 10 Aug 2024 01:42:36 +0900 Subject: [PATCH 4/5] 2024-08-10 Minimum Height Trees --- InSange/BFS/310_Minimum Height Trees.cpp | 66 ++++++++++++++++++++++++ InSange/README.md | 1 + 2 files changed, 67 insertions(+) create mode 100644 InSange/BFS/310_Minimum Height Trees.cpp diff --git a/InSange/BFS/310_Minimum Height Trees.cpp b/InSange/BFS/310_Minimum Height Trees.cpp new file mode 100644 index 0000000..d482392 --- /dev/null +++ b/InSange/BFS/310_Minimum Height Trees.cpp @@ -0,0 +1,66 @@ +#include +#include +#include + +using namespace std; + +class Solution { +public: + vector findMinHeightTrees(int n, vector>& edges) { + map> m; + vector ans; + vector check(n, false); + int* degree = new int[n] {0}; + + for (vector node : edges) + { + m[node[0]].push_back(node[1]); + m[node[1]].push_back(node[0]); + degree[node[0]]++; + degree[node[1]]++; + } + int current_n = n; + + queue q; + if (current_n > 2) + { + for (int i = 0; i < n; i++) + { + if (degree[i] == 1 && check[i] == false) + { + check[i] = true; + q.push(i); + current_n--; + } + } + } + while (current_n > 2 && !q.empty()) + { + int size = q.size(); + + for (int j = 0; j < size; j++) + { + int remove_n = q.front(); + q.pop(); + + for (auto node : m[remove_n]) + { + degree[node]--; + if (degree[node] == 1) + { + q.push(node); + check[node] = true; + current_n--; + } + } + } + } + + for (int i = 0; i < n; i++) + { + if (check[i] == false) ans.push_back(i); + } + + return ans; + } +}; \ No newline at end of file diff --git a/InSange/README.md b/InSange/README.md index 537b1a9..13400de 100644 --- a/InSange/README.md +++ b/InSange/README.md @@ -26,6 +26,7 @@ | 22차시 | 2024.07.31 | DP | [Filling Bookcase Shelves](https://leetcode.com/problems/filling-bookcase-shelves/) | [#22](https://github.com/AlgoLeadMe/AlgoLeadMe-8/pull/81)] | 23차시 | 2024.08.03 | 슬라이딩 윈도우 | [Minimum Swaps to Group All 1's Together 2](https://leetcode.com/problems/minimum-swaps-to-group-all-1s-together-ii/) | [#23](https://github.com/AlgoLeadMe/AlgoLeadMe-8/pull/82)] | 24차시 | 2024.08.04 | BFS | [트리](https://www.acmicpc.net/problem/1068) | [#24](https://github.com/AlgoLeadMe/AlgoLeadMe-8/pull/83)] +| 25차시 | 2024.08.10 | BFS | [Minimum Height Trees](https://leetcode.com/problems/minimum-height-trees/) | [#25](https://github.com/AlgoLeadMe/AlgoLeadMe-8/pull/87)] --- https://leetcode.com/problems/robot-collisions/ From 3fae6debbdff1f593cb8aa46746eef46f56d75f5 Mon Sep 17 00:00:00 2001 From: InSange Date: Sun, 11 Aug 2024 01:52:57 +0900 Subject: [PATCH 5/5] 2024-08-11 Magic Squares In Grid --- InSange/README.md | 1 + .../840_Magic Squares In Grid.cpp" | 55 +++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 "InSange/\354\210\230\355\225\231/840_Magic Squares In Grid.cpp" diff --git a/InSange/README.md b/InSange/README.md index 13400de..9513d03 100644 --- a/InSange/README.md +++ b/InSange/README.md @@ -27,6 +27,7 @@ | 23차시 | 2024.08.03 | 슬라이딩 윈도우 | [Minimum Swaps to Group All 1's Together 2](https://leetcode.com/problems/minimum-swaps-to-group-all-1s-together-ii/) | [#23](https://github.com/AlgoLeadMe/AlgoLeadMe-8/pull/82)] | 24차시 | 2024.08.04 | BFS | [트리](https://www.acmicpc.net/problem/1068) | [#24](https://github.com/AlgoLeadMe/AlgoLeadMe-8/pull/83)] | 25차시 | 2024.08.10 | BFS | [Minimum Height Trees](https://leetcode.com/problems/minimum-height-trees/) | [#25](https://github.com/AlgoLeadMe/AlgoLeadMe-8/pull/87)] +| 26차시 | 2024.08.11 | 수학 | [Magic Squares In Grid](https://leetcode.com/problems/magic-squares-in-grid/) | [#26](https://github.com/AlgoLeadMe/AlgoLeadMe-8/pull/89)] --- https://leetcode.com/problems/robot-collisions/ diff --git "a/InSange/\354\210\230\355\225\231/840_Magic Squares In Grid.cpp" "b/InSange/\354\210\230\355\225\231/840_Magic Squares In Grid.cpp" new file mode 100644 index 0000000..f830c03 --- /dev/null +++ "b/InSange/\354\210\230\355\225\231/840_Magic Squares In Grid.cpp" @@ -0,0 +1,55 @@ +#include + +using namespace std; + +class Solution { +public: + bool Check(int r, int c, vector>& grid) + { + vector isCheck(10, false); + + for (int i = 0; i < 3; i++) + { + for (int j = 0; j < 3; j++) + { + int num = grid[r + i][c + j]; + if (num < 1 || num > 9) return false; + if (isCheck[num]) return false; + isCheck[num] = true; + } + } + + int standard_num = grid[r][c] + grid[r + 1][c + 1] + grid[r + 2][c + 2]; + if (standard_num != grid[r][c + 2] + grid[r + 1][c + 1] + grid[r + 2][c]) return false; + + for (int i = 0; i < 3; i++) + { + if (standard_num != (grid[r + i][c] + grid[r + i][c + 1] + grid[r + i][c + 2])) return false; + } + + for (int i = 0; i < 3; i++) + { + if (standard_num != (grid[r][c + i] + grid[r + 1][c + i] + grid[r + 2][c + i])) return false; + } + + return true; + } + + int numMagicSquaresInside(vector>& grid) { + int col = grid[0].size(), row = grid.size(); + + if (col < 3 || row < 3) return 0; + + int ans = 0; + + for (int i = 0; i < row - 2; i++) + { + for (int j = 0; j < col - 2; j++) + { + if (Check(i, j, grid)) ans++; + } + } + + return ans; + } +}; \ No newline at end of file