diff --git "a/YIM2UL2ET/BFS/13\354\260\250\354\213\234 - BOJ 7569.cpp" "b/YIM2UL2ET/BFS/13\354\260\250\354\213\234 - BOJ 7569.cpp" new file mode 100644 index 0000000..4db562f --- /dev/null +++ "b/YIM2UL2ET/BFS/13\354\260\250\354\213\234 - BOJ 7569.cpp" @@ -0,0 +1,50 @@ +#include +#include +#include + +struct idx {int z, y, x;}; + +int main(void) +{ + std::ios_base::sync_with_stdio(false); + std::cin.tie(NULL); + + int m, n, h, res = 0, non = 0; + std::vector offset = {{1, 0, 0}, {-1, 0, 0}, {0, 1, 0}, {0, -1, 0}, {0, 0, 1}, {0, 0, -1}}; + std::queue que[2]; + bool curQueue = false; + + std::cin >> n >> m >> h; + int box[h][m][n]; + + for (int z = 0; z < h; z++) { + for (int y = 0; y < m; y++) { + for (int x = 0; x < n; x++) { + std::cin >> box[z][y][x]; + if (box[z][y][x] == 1) que[curQueue].push({z, y, x}); + else if (box[z][y][x] == 0) non++; + } + } + } + + while (!que[curQueue].empty() && non > 0) { + while (!que[curQueue].empty()) { + int z = que[curQueue].front().z, y = que[curQueue].front().y, x = que[curQueue].front().x; + for (idx set : offset) { + int zz = z + set.z, yy = y + set.y, xx = x + set.x; + if (zz >= 0 && zz < h && yy >= 0 && yy < m && xx >= 0 && xx < n && box[zz][yy][xx] == 0) { + box[zz][yy][xx] = 1, non--; + que[!curQueue].push({zz, yy, xx}); + } + } + que[curQueue].pop(); + } + curQueue = !curQueue; + res++; + } + + if (non > 0) std::cout << -1; + else std::cout << res; + + return 0; +} \ No newline at end of file diff --git "a/YIM2UL2ET/DP/17\354\260\250\354\213\234 - BOJ11726.cpp" "b/YIM2UL2ET/DP/17\354\260\250\354\213\234 - BOJ11726.cpp" new file mode 100644 index 0000000..da0dd7f --- /dev/null +++ "b/YIM2UL2ET/DP/17\354\260\250\354\213\234 - BOJ11726.cpp" @@ -0,0 +1,20 @@ +#include +#include + +std::vector dp(1000); + +int func(int n) { + if (dp[n-1] == 0) { + dp[n-1] = (func(n-1) + func(n-2)) % 10007; + } + return dp[n-1]; +} + +int main(void) { + dp[0] = 1, dp[1] = 2; + + int n; + std::cin >> n; + std::cout << func(n); + return 0; +} \ No newline at end of file diff --git a/YIM2UL2ET/README.md b/YIM2UL2ET/README.md index 32219bb..d868578 100644 --- a/YIM2UL2ET/README.md +++ b/YIM2UL2ET/README.md @@ -14,4 +14,10 @@ | 10차시 | 2024.03.10 | 스택 | [BOJ 1406](https://www.acmicpc.net/problem/1406) | [BOJ 1406 풀이](https://github.com/AlgoLeadMe/AlgoLeadMe-7/pull/31) | | 11차시 | 2024.03.18 | 스택 | [BOJ 1918](https://www.acmicpc.net/problem/1918) | [BOJ 1918 풀이](https://github.com/AlgoLeadMe/AlgoLeadMe-7/pull/36) | | 12차시 | 2024.03.28 | 비트마스킹 | [BOJ 11723](https://www.acmicpc.net/problem/11723) | [BOJ 11723 풀이](https://github.com/AlgoLeadMe/AlgoLeadMe-7/pull/39) | ---- +| 13차시 | 2024.04.01 | BFS | [BOJ 7569](https://www.acmicpc.net/problem/7569) | [BOJ 7569 풀이](https://github.com/AlgoLeadMe/AlgoLeadMe-7/pull/42) | +| 14차시 | 2024.04.04 | 우선순위 큐 | [BOJ 11286](https://www.acmicpc.net/problem/11286) | [BOJ 11286 풀이](https://github.com/AlgoLeadMe/AlgoLeadMe-7/pull/43) | +| 15차시 | 2024.04.09 | 구현 | [BOJ 14719](https://www.acmicpc.net/problem/14719) | [BOJ 14719 풀이](https://github.com/AlgoLeadMe/AlgoLeadMe-7/pull/48) | +| 16차시 | 2024.04.11 | 애드 혹 | [BOJ 15927](https://www.acmicpc.net/problem/15927) | [BOJ 15927 풀이](https://github.com/AlgoLeadMe/AlgoLeadMe-7/pull/51) | +| 17차시 | 2024.04.15 | DP | [BOJ 11726](https://www.acmicpc.net/problem/11726) | [BOJ 11726 풀이](https://github.com/AlgoLeadMe/AlgoLeadMe-7/pull/53) | + +--- \ No newline at end of file diff --git "a/YIM2UL2ET/\352\265\254\355\230\204/15\354\260\250\354\213\234 - BOJ 14719.cpp" "b/YIM2UL2ET/\352\265\254\355\230\204/15\354\260\250\354\213\234 - BOJ 14719.cpp" new file mode 100644 index 0000000..9b6e931 --- /dev/null +++ "b/YIM2UL2ET/\352\265\254\355\230\204/15\354\260\250\354\213\234 - BOJ 14719.cpp" @@ -0,0 +1,23 @@ +#include +#include +#include + +int main(void) { + int height, width, res = 0; + + std::cin >> height >> width; + std::vector vec(width); + for (int i = 0; i < width; i++) std::cin >> vec[i]; + + for (int i = height; i >= 0; i--) { + int cnt = std::count_if(vec.begin(), vec.end(), [&i](int v) -> bool {return v>=i;}); + if (cnt > 1) { + int front = std::find_if(vec.begin(), vec.end(), [&i](int v) -> bool {return v>=i;}) - vec.begin(); + int back = std::find_if(vec.rbegin(), vec.rend(), [&i](int v) -> bool {return v>=i;}) - vec.rbegin(); + res += width - back - front - cnt; + } + } + + std::cout << res; + return 0; +} \ No newline at end of file diff --git "a/YIM2UL2ET/\354\225\240\353\223\234 \355\230\271/16\354\260\250\354\213\234 - BOJ 15927.cpp" "b/YIM2UL2ET/\354\225\240\353\223\234 \355\230\271/16\354\260\250\354\213\234 - BOJ 15927.cpp" new file mode 100644 index 0000000..a54da02 --- /dev/null +++ "b/YIM2UL2ET/\354\225\240\353\223\234 \355\230\271/16\354\260\250\354\213\234 - BOJ 15927.cpp" @@ -0,0 +1,22 @@ +#include +#include + +bool isOneChar(std::string str) { + int size = str.size(); + for (int i = 1; i < size; i++) { + if (str[i-1] != str[i]) return false; + } + return true; +} + +int main(void) { + std::string str, rstr; + std::cin >> str, rstr = str; + std::reverse(rstr.begin(), rstr.end()); + + if (isOneChar(str)) std::cout << -1; + else if (str == rstr) std::cout << str.size()-1; + else std::cout << str.size(); + + return 0; +} \ No newline at end of file diff --git "a/YIM2UL2ET/\354\232\260\354\204\240\354\210\234\354\234\204 \355\201\220/14\354\260\250\354\213\234 - BOJ 11286.cpp" "b/YIM2UL2ET/\354\232\260\354\204\240\354\210\234\354\234\204 \355\201\220/14\354\260\250\354\213\234 - BOJ 11286.cpp" new file mode 100644 index 0000000..43b1864 --- /dev/null +++ "b/YIM2UL2ET/\354\232\260\354\204\240\354\210\234\354\234\204 \355\201\220/14\354\260\250\354\213\234 - BOJ 11286.cpp" @@ -0,0 +1,51 @@ +#include +#include + +void cre_heap(std::vector &heap, int key) { + int k = heap.size(); + heap.push_back(key); + while (k > 1) { + if (abs(heap[k/2]) > abs(heap[k]) || (abs(heap[k/2]) == abs(heap[k]) && heap[k/2] > heap[k])) { + std::swap(heap[k], heap[k/2]); + k /= 2; + } + else break; + } + return; +} + +void del_heap(std::vector &heap) { + int k = 1; + heap[1] = heap.back(), heap.pop_back(); + while (k * 2 <= heap.size()) { + if (k * 2 + 1 < heap.size() && (abs(heap[k*2+1]) < abs(heap[k*2]) || (abs(heap[k*2+1]) == abs(heap[k*2]) && heap[k*2+1] < heap[k*2]))) + k = k*2+1; + else k = k*2; + + if (abs(heap[k/2]) > abs(heap[k]) || (abs(heap[k/2]) == abs(heap[k]) && heap[k/2] > heap[k])) + std::swap(heap[k/2], heap[k]); + else break; + } + return; +} + +int main(void) { + std::ios_base::sync_with_stdio(false); + std::cin.tie(NULL); + std::cout.tie(NULL); + + int n, k, x; + std::vector abs_heap = {0}; + + std::cin >> n; + for (int i = 0; i < n; i++) { + std::cin >> x; + if (abs(x) > 0) cre_heap(abs_heap, x); + else if (abs_heap.size() > 1) { + std::cout << abs_heap[1] << '\n'; + del_heap(abs_heap); + } + else std::cout << 0 << '\n'; + } + +} \ No newline at end of file