#include <iostream>
#include <algorithm>
#include <math.h>
#define MaxMem 50001
int dp[MaxMem] = {};
int main(){
int n,temp,pow_temp = 0;
std::cin >> n;
std::fill_n(dp,n+1,MaxMem);
dp[0] = 0;
dp[1] = 1;
for (int i = 2; i <=n; i++){
temp = int(std::sqrt(i));
for (int j = temp; j >= 1; j--){
pow_temp = std::pow(j,2);
if (i == pow_temp){
dp[i] = 1;
break;
}
else{
dp[i] = std::min(dp[pow_temp] + dp[i - pow_temp],dp[i]);
}
}
}
std::cout << dp[n];
return 0;
}
- 배열 초기화 해주는 부분에 대해서는 크게 2가지 방법이 있다.
- 학부생 시절 다 알았던 문법인데 까먹었다,,,
- std::fill_n(array,size,value);
- memset(array,value,size);
- memset의 경우,
memory.h
나 string.h
헤더에서 가져올 것
- 자료형 기반으로 size할당해줘야함.
sizeof(int)