boj)1699 - 제곱수
2020. 9. 18. 16:11ㆍPS/boj
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class boj_1699 {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static long[] dp;
public static void main(String[] args) throws IOException {
int n = Integer.parseInt(br.readLine());
dp = new long[n+1];
for (int i = 1; i <= n; i++) {
dp[i] = i; // 최솟값을 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]);
}
}
- n을 만드는 과정에서 마지막에 올 수 있는 수는 1^2, 2^2, ... 이 있다. -> 변수로 생각 i
- 그렇다면 나머지는 n-i^2 이고 dp[n] = dp[n-i^2] + 1로 볼 수 있다.
- 여기서 i^2의 범위는 1 ~ n까지이고 반복하며 최솟값을 dp에 넣어준다.
- dp의 초기값은 현재값을 넣어준다. 1^2 끼리만 더하는게 최대값이다.
'PS > boj' 카테고리의 다른 글
boj)1149 - RGB 거리 (0) | 2020.09.19 |
---|---|
boj)2225 - 합분해 (0) | 2020.09.18 |
boj)1912 - 연속합 (0) | 2020.09.18 |
boj)14002 - 가장 긴 증가하는 부분 수열 4 (0) | 2020.09.18 |
boj)11053 - 가장 긴 증가하는 부분 수열 (0) | 2020.09.17 |