https://www.acmicpc.net/problem/17626
17626번: Four Squares
라그랑주는 1770년에 모든 자연수는 넷 혹은 그 이하의 제곱수의 합으로 표현할 수 있다고 증명하였다. 어떤 자연수는 복수의 방법으로 표현된다. 예를 들면, 26은 52과 12의 합이다; 또한 42 + 32 + 1
www.acmicpc.net
해석 및 팁
이 문제의 핵심은 dp [i] = dp [i- j*j] + dp [j*j]이라는 점화식을 발견하는 것입니다. 이때 dp [j*j]는 제곱수이므로 항상 1입니다. 따라서 dp [i- j*j]의 최솟값을 구한 후 1을 더해주면 됩니다.
Java 코드
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int min;
int n = sc.nextInt();
int arr[] = new int[n + 1];
arr[1] = 1;
for(int i = 2; i <= n; i++) {
min = 50000;
for(int j = 1; j * j <= i; j++) {
min = Math.min(min, arr[i - j * j]);
}
arr[i] = min +1 ; //min + arr[j * j]
}
System.out.println(arr[n]);
}
}
'백준' 카테고리의 다른 글
백준 1072 게임(Java) (0) | 2023.02.03 |
---|---|
백준 10973 이전 순열(Java) (0) | 2023.02.03 |
백준 1735 분수 합(Java) (0) | 2023.02.03 |
백준 1449 수리공 항승(Java) (0) | 2023.02.03 |
백준 11478 서로 다른 부분 문자열의 개수(Java) (0) | 2023.02.03 |