728x90
🤔문제 접근
처음에 점화식을 구하지 못하고
Math.sqrt(N) 을 한 값을 N에서 빼주고 answer+1 해주는 방식으로
단순 반복문으로 해결하려고 했다. 하지만 이 경우는 항의 최소를 구할 수 없는 방법이었다.
어떤 수 N은 N-1보다 작은 제곱수들 중 최소 제곱수들의 합 + 1이라는 규칙을 갖고 있다.
예를 들어 15는
(15-1) 의 최소 제곱수의 합 +1
(15-4) 의 최소 제곱수의 합 +1
(15-9) 의 최소 제곱수의 합 +1 이다.
문제에선 항이 최소일 때를 구하는 것이므로 이 중 최소 값을 구하면 된다.
🚨CODE
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int[] dp = new int[n+1];
for(int i = 1; i<=n; i++) {
dp[i] = i;
for(int j = 1; j*j<=i; j++) {
if(dp[i]> dp[i-j*j] + 1) {
dp[i] = dp[i-j*j] + 1;
}
}
}
System.out.println(dp[n]);
}
}
728x90
반응형
'코딩테스트' 카테고리의 다른 글
[JAVA] 백준 1932 - 정수 삼각형 (0) | 2024.03.10 |
---|---|
[JAVA] 백준 2156 - 포도주 시식 (0) | 2024.03.06 |
[JAVA] 백준 6603 - 로또 (1) | 2024.03.01 |
[JAVA] 백준 1916 - 최소비용 구하기 (0) | 2024.02.27 |
[JAVA] 백준 2108 - 통계학 (1) | 2024.02.27 |