백준공부/java
[백준] 17626번 Four Squares (silver 3
gomduri43
2023. 12. 29. 11:39
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));
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
int n=Integer.valueOf(br.readLine());
int[] num=new int[n+1];
num[0]=10000;
for(int i=1; i<=Math.sqrt(n)+1; i++){
if(i*i<=n){
num[i*i]=1;
}
}
for(int i=1; i<=n; i++){
if(num[i]==1){
continue;
}
int min=Integer.MAX_VALUE;
for(int j=1; j<=Math.sqrt(i); j++){
int temp=num[j*j]+num[i-j*j];
min=Math.min(min, temp);
}
num[i]=min;
}
bw.write(num[n]+"");
bw.flush();
}
}
// 해당 문제는 제곱수의 합으로 수들을 표현하는 것이다.
// 부분의 최적은 결국 전체의 최적이 적용된다. 왜냐하면, 결국 수가 커지는 건 밑에 작은 수의
// 방법 +a 방식이기 때문이다. 따라서, 완전제곱수로 1가지의 수로 표현되는 방식들을 초기화 한 뒤,
// 이를 제외한 수들의 방법 수를 점차 정하는 방법으로 해결했다.