diff --git "a/khj20006/202502/20 BOJ G5 \353\235\274\352\267\270\353\236\221\354\243\274\354\235\230 \353\204\244 \354\240\234\352\263\261\354\210\230 \354\240\225\353\246\254.md" "b/khj20006/202502/20 BOJ G5 \353\235\274\352\267\270\353\236\221\354\243\274\354\235\230 \353\204\244 \354\240\234\352\263\261\354\210\230 \354\240\225\353\246\254.md" new file mode 100644 index 00000000..2653b8ec --- /dev/null +++ "b/khj20006/202502/20 BOJ G5 \353\235\274\352\267\270\353\236\221\354\243\274\354\235\230 \353\204\244 \354\240\234\352\263\261\354\210\230 \354\240\225\353\246\254.md" @@ -0,0 +1,40 @@ +```cpp + +#include +#include +#include +using namespace std; + +int main() +{ + cin.tie(0)->sync_with_stdio(0); + + int N; + for (cin >> N; N; cin >> N) { + + vector A; + int ans = 0; + for (int i = 1; i*i <= N; i++) A.push_back(i*i); + int M = A.size(); + + // 1 + if (A.back() == N) ans++; + // 2 + for (int i = 0; i < M; i++) for (int j = i; j < M; j++) if (A[i] + A[j] == N) ans++; + // 3 + for (int i = 0; i < M; i++) for (int j = i; j < M; j++) { + if (A[i] + A[j] >= N) break; + ans += upper_bound(A.begin() + j, A.end(), N - A[i] - A[j]) - lower_bound(A.begin() + j, A.end(), N - A[i] - A[j]); + } + // 4 + for (int i = 0; i < M; i++) for (int j = i; j < M; j++) for (int k = j; k < M; k++) { + if (A[i] + A[j] + A[k] >= N) break; + ans += upper_bound(A.begin() + k, A.end(), N - A[i] - A[j] - A[k]) - lower_bound(A.begin() + k, A.end(), N - A[i] - A[j] - A[k]); + } + + cout << ans << '\n'; + } + +} + +```