diff --git "a/miniron-v/DP/1699-\354\240\234\352\263\261\354\210\230\354\235\230 \355\225\251.cpp" "b/miniron-v/DP/1699-\354\240\234\352\263\261\354\210\230\354\235\230 \355\225\251.cpp" new file mode 100644 index 0000000..1461acc --- /dev/null +++ "b/miniron-v/DP/1699-\354\240\234\352\263\261\354\210\230\354\235\230 \355\225\251.cpp" @@ -0,0 +1,24 @@ +#include +#include + +int main() { + int n; + std::cin >> n; + + std::vector dp(n + 1, 0); + dp[1] = 1; + + for (int i = 2; i <= n; ++i) { + int min_index = i - 1; + + for (int j = 2; j * j <= i; ++j) { + if (dp[i - (j * j)] < dp[min_index]) { + min_index = i - (j * j); + } + } + + dp[i] = dp[min_index] + 1; + } + + std::cout << dp[n]; +} \ No newline at end of file diff --git a/miniron-v/README.md b/miniron-v/README.md index e1e10c4..d2bb009 100644 --- a/miniron-v/README.md +++ b/miniron-v/README.md @@ -18,4 +18,6 @@ | 13차시 | 2024.02.06 | DP | [퇴사 2](https://www.acmicpc.net/problem/15486) | [#50](https://github.com/AlgoLeadMe/AlgoLeadMe-5/pull/50) | | 14차시 | 2024.02.11 | 그래프, DP | [ACM Craft](https://www.acmicpc.net/problem/1005) | [#53](https://github.com/AlgoLeadMe/AlgoLeadMe-5/pull/53) | | 15차시 | 2024.02.15 | DP, 큰 수 연산 | [타일링](https://www.acmicpc.net/problem/1793) | [#56](https://github.com/AlgoLeadMe/AlgoLeadMe-5/pull/56) | +| 16차시 | 2024.02.18 | 수학 | [합](https://www.acmicpc.net/problem/1081) | [#61](https://github.com/AlgoLeadMe/AlgoLeadMe-5/pull/61) | +| 17차시 | 2024.02.21 | DP | [제곱수의 합](https://www.acmicpc.net/problem/1699) | [#64](https://github.com/AlgoLeadMe/AlgoLeadMe-5/pull/64) | --- diff --git "a/miniron-v/\354\210\230\355\225\231/1081-\355\225\251.cpp" "b/miniron-v/\354\210\230\355\225\231/1081-\355\225\251.cpp" new file mode 100644 index 0000000..76daf6a --- /dev/null +++ "b/miniron-v/\354\210\230\355\225\231/1081-\355\225\251.cpp" @@ -0,0 +1,36 @@ +#include + +long long gaussSum(long long k) { + if (k % 2 == 0) { + return (k / 2) * (k + 1); + } + + return ((k + 1) / 2) * k; +} + +long long getSumOfPlace(long long n) { + if (n < 1) { + return 0; + } + + long long answer = gaussSum(n); + + long long d = 10; + while ((n / d) > 0) { + long long q = n / d; + long long r = n % d; + + answer -= 9 * (gaussSum(q - 1) * d + q * (r + 1)); + + d *= 10; + } + + return answer; +} + +int main() { + long long l, u; + std::cin >> l >> u; + + std::cout << getSumOfPlace(u) - getSumOfPlace(l - 1); +} \ No newline at end of file