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..6e73fbf 100644 --- a/InSange/README.md +++ b/InSange/README.md @@ -26,6 +26,9 @@ | 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)] +| 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)] +| 27차시 | 2024.08.17 | 문자열 | [Number of Senior Citizens](https://leetcode.com/problems/number-of-senior-citizens/) | [#27](https://github.com/AlgoLeadMe/AlgoLeadMe-8/pull/91)] --- https://leetcode.com/problems/robot-collisions/ diff --git "a/InSange/\353\254\270\354\236\220\354\227\264/2678_Number of Senior Citizens.cpp" "b/InSange/\353\254\270\354\236\220\354\227\264/2678_Number of Senior Citizens.cpp" new file mode 100644 index 0000000..656e589 --- /dev/null +++ "b/InSange/\353\254\270\354\236\220\354\227\264/2678_Number of Senior Citizens.cpp" @@ -0,0 +1,24 @@ +#include +#include + +using namespace std; + +class Solution { +public: + int countSeniors(vector& details) { + int seniorCount = 0; + + for (string& passengerInfo : details) { + int ageTens = passengerInfo[11] - '0'; + int ageOnes = passengerInfo[12] - '0'; + + int age = ageTens * 10 + ageOnes; + + if (age > 60) { + seniorCount++; + } + } + + return seniorCount; + } +}; \ No newline at end of file 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