다이나믹 프로그래밍을 사용했다.
사실 이 문제를 봤는데
https://www.acmicpc.net/problem/17626
이 문제와 완전히 똑같다는 것을 알았다.
한 가지 다른 것은 n의 범위인데, 여기서는 n이 2배 커졌다.
그래서 초기 배열을 50,000의 범위에서 100,000 까지만 늘려주니 바로 통과했다.
import java.io.*;
import java.util.*;
public class Main{
public static void main(String[] args) throws IOException{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
StringBuilder sb=new StringBuilder();
int dp[]=new int[100001];
dp[1]=1;
for(int i=2;i<dp.length;i++) {
dp[i]=Integer.MAX_VALUE;
for(int j=1;j*j<=i;j++) {
dp[i]=Math.min(dp[i-j*j],dp[i]);
}
dp[i]++;
}
int n=Integer.parseInt(br.readLine());
System.out.println(dp[n]);
}
}
전의 문제와 똑같아서 별 달리 어려울 게 없다고 느껴졌다.
하루에 백준 1문제 이상 푸는 것을 목표로 하고있다.
https://solved.ac/profile/anwlro0212