#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
const int MAX = 100001;
int n;
int sumcount[MAX];
int minnum() {
for (int i = 2; i <= n; i++) {
if (sumcount[i] == 1)
continue;
int result = 987654321;
for (int j = (int)sqrt(i); j >= 1; j--){
int mins = 1 + sumcount[i - (j*j)];
if (result > mins) {
result = mins;
sumcount[i] = result;
}
}
}
return sumcount[n];
}
int main(void) {
cin >> n;
memset(sumcount, 0, sizeof(sumcount));
for (int i = 1; pow(i, 2) <= n; i++) {
sumcount[i*i] = 1;
}
cout << minnum();
}
'백준 알고리즘 > 다이나믹 프로그래밍' 카테고리의 다른 글
백준 11051번 C++ (0) | 2019.01.21 |
---|---|
백준 11055번 C++ (0) | 2019.01.21 |
백준 11048번 C++ (0) | 2019.01.18 |
백준 2167번 C++ (0) | 2019.01.17 |
백준 11057번 C++ (0) | 2019.01.17 |