n
의 경우가 50000*50000=2500000000 으로 풀수 없다.직접 표를 그려봤습니다
. 위에 그림에서 사다리같이 생긴 표는 dp 배열이고, j는 제곱수입니다.
예를들어 5는 자기보다 작은 제곱수들중 가장 큰 제곱수는 2 입니다
그래서 2의 제곱 +1이므로 dp[5]=2이다
13의 예시를 보면, 자기보다 작은 제곱수중 가장 큰 제곱수는 3이다
그래서 13-(3의 제곱=9)=4
dp[4]+dp[9]가 dp[13]의 최소값이 됩니다!
min_value = min(min_value, dp[i - (j**2)])
import sys
input=sys.stdin.readline
N = int(input())
dp = [0,1]
for i in range(2, N+1):
min_value = 1e9
j = 1
while (j**2) <= i:
min_value = min(min_value, dp[i - (j**2)])
j += 1
dp.append(min_value + 1)
print(dp[N])