문제 : https://www.acmicpc.net/problem/17626
난이도 : 실버3

n=int(input())
dp=[0]*(n+1)
dp[1]=1
for i in range(2,n+1):
mini=1e9
for j in range(1,int(i**(0.5))+1):
mini=min(mini,dp[i-(j**2)])
dp[i]=mini+1
print(dp[n])
import math
n=int(input())
dp=[0 if i**0.5%1 else 1 for i in range(n+1)]
mini=4
def square(n):
if int(math.sqrt(n))==math.sqrt(n):
return True
else:
return False
if square(n):
mini = 1
else:
for i in range(int(math.sqrt(n)),0,-1):
if square(n-(i**2)):
mini=2
break
else:
for j in range(int(math.sqrt(n-i**2)),0,-1):
if square(n-i**2-j**2):
mini=3
break
print(mini)