π [λ°±μ€μκ³ λ¦¬μ¦ νμ΄] Q.1699 μ κ³±μμ ν© λ¬Έμ νμ΄ - java
π λ¬Έμ
https://www.acmicpc.net/problem/1699
μ΄λ€ μμ°μ Nμ κ·Έλ³΄λ€ μκ±°λ κ°μ μ κ³±μλ€μ ν©μΌλ‘ λνλΌ μ μλ€. μλ₯Ό λ€μ΄ 11=3^2+1^2+1^2(3κ° ν)μ΄λ€.
μ΄λ° ννλ°©λ²μ μ¬λ¬ κ°μ§κ° λ μ μλλ°, 11μ κ²½μ° 11=2^2+2^2+1^2+1^2+1^2(5κ° ν)λ κ°λ₯νλ€. μ΄ κ²½μ°,
μνμ μν¬λΌν μ€λ β11μ 3κ° νμ μ κ³±μ ν©μΌλ‘ ννν μ μλ€.βλΌκ³ λ§νλ€. λν 11μ κ·Έλ³΄λ€ μ μ νμ
μ κ³±μ ν©μΌλ‘ ννν μ μμΌλ―λ‘, 11μ κ·Έ ν©μΌλ‘μ¨ ννν μ μλ μ κ³±μ νμ μ΅μ κ°μλ 3μ΄λ€.
μ£Όμ΄μ§ μμ°μ Nμ μ΄λ κ² μ κ³±μλ€μ ν©μΌλ‘ ννν λμ κ·Έ νμ μ΅μκ°μλ₯Ό ꡬνλ νλ‘κ·Έλ¨μ μμ±νμμ€.
μ λ ₯
첫째 μ€μ μμ°μ Nμ΄ μ£Όμ΄μ§λ€. (1 β€ N β€ 100,000)
μΆλ ₯
μ£Όμ΄μ§ μμ°μλ₯Ό μ κ³±μμ ν©μΌλ‘ λνλΌ λμ κ·Έ μ κ³±μ νμ μ΅μ κ°μλ₯Ό μΆλ ₯νλ€.
π μ κ·Όλ²
BOJ Q.11722 μ κ³±μμ ν© λ¬Έμ μ λλ€.
λμ νλ‘κ·Έλλ°μΌλ‘ νμ΄κ° κ°λ₯ ν©λλ€.
μ£Όμ΄μ§λ μμ°μλ₯Ό μ κ³±μμ ν©μΌλ‘ λνλ λ ν΄λΉ μ κ³±μ νμ μ΅μ κ°μλ₯Ό ꡬνλ λ¬Έμ μ λλ€.
1 = 1^2
2 = 1^2 + 1^2
3 = 1^2 + 1^2 + 1^2
4 = 2^2
μΌ λ
μμ°μ 5μ λν μ κ³±μμ ν©μ
2+3 λλ 1+4 λ‘ κ°λ₯ν©λλ€ .
5 = 1^2 + 1^2 + 1^2 + 1^2 + 1^2
or
5 = 2^2 + 1^2
λ‘ κ°λ₯νλ° μ¬κΈ°μ 1+4μ κ²½μ°μΈ 2^2 + 1^2 κ° νμ κ°μκ° μ μ΅λλ€.
μ¦ 5μ λν μ κ³±μμ ν©μ λ§λ€ μ μλ κ²½μ°μμ μ΅μ κ°μμ νμΌλ‘λ§ κ΅¬μ±λλλ‘ νλ©΄ λ©λλ€.
μ¬κΈ°μ d[i] λ°°μ΄μ κ° μμ°μ iμ λν μ κ³±μμ ν© μ΅μ κ°μμ νμΌλ‘ ꡬμ±λμ΄ μμΌλ―λ‘ μ΄ κ°λ€μ μ‘°ν©νλ©΄
μ£Όμ΄μ§ μμ°μ NκΉμ§μ μ κ³±μμ ν©μ μ΅μ κ°μλ₯Ό ꡬν μ μμ΅λλ€.
d[i] = min(d[i],d[i-(μ κ³±μμ ν©)] + 1)
π» μ½λ
package problem.dynamic;
import java.io.*;
public class Main_1699 {
static int n;
static int[] d;
public static void main(String[] args) throws IOException {
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
input();
solve();
bw.write(Integer.toString(d[n]));
bw.flush();
bw.close();
}
public static void solve() {
d[1] = 1;
for(int i=2; i<=n; i++){
d[i] = i;
for(int j=1; j*j<=i; j++){
d[i] = Math.min(d[i],d[i-(j*j)]+1);
}
}
}
public static void input() throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(br.readLine());
d = new int[n + 1];
br.close();
}
}