[λ°±μ€/Java] μ κ³±μμ ν© 1699
λ¬Έμ
https://www.acmicpc.net/problem/1699
1699λ²: μ κ³±μμ ν©
μ΄λ€ μμ°μ Nμ κ·Έλ³΄λ€ μκ±°λ κ°μ μ κ³±μλ€μ ν©μΌλ‘ λνλΌ μ μλ€. μλ₯Ό λ€μ΄ 11=32+12+12(3κ° ν)μ΄λ€. μ΄λ° ννλ°©λ²μ μ¬λ¬ κ°μ§κ° λ μ μλλ°, 11μ κ²½μ° 11=22+22+12+12+12(5κ° ν)λ κ°λ₯νλ€
www.acmicpc.net
νμ΄
μ²μμλ ν° μ κ³±μ λΉΌμ£Όκ³ κ°μλ₯Ό ꡬνλ μμΌλ‘ μ§°λ€.
(μ΄λ κ² νλ©΄ λ μ€ ,,, )
μλ₯Ό λ€μ΄ 41 = 16 + 25λ‘ 2 κ° λμ¬ μλ μκ³ , 36 + 4 + 1λ‘ 3 μ΄ λμ¬ μλ μλ€.
νμ§λ§ λ΄κ° μ§ κ±΄ ν° μ κ³±μ λΉΌμ£Όκ³ κ°μλ₯Ό μΈλ μμΌλ‘ μ§°κΈ° λλ¬Έμ 36 + 4 + 1λ‘ 3μ΄ λ°νλμ΄ νλ¦° λ‘μ§μ΄ λμλ€.
κ·Έλμ λ°°μ΄μ νλ μ μΈν΄μ μ¬λ¬ κ²½μ° μ€ κ°μ₯ μμ κ°μ λ£μ΄μ λ€μ λ¬Έμ λ₯Ό νμλ€.
arr[1] = 1
arr[2] = 2
arr[3] = 3
arr[4] = 2^2 = 1
arr[5] = arr[4] + arr[1] = 1 + 1 = 2
arr[6] = arr[4] + arr[2] = 1 + 2 = 3
arr[7] = arr[4] + arr[3] = 1 + 3 = 4
arr[8] = arr[4] + arr[4] = 1 + 1 = 2
arr[9] = 3^2 = 1
arr[10] = arr[9] + arr[1] = 1 + 1 = 2
arr[6] + arr[4] = 3 + 1 = 4
μμ²λΌ arr[10] μ²λΌ μ¬λ¬κ°μ κ°μ΄ ꡬν΄μ§ κ²½μ° Math.min()μ ν΅ν΄ μ΅μκ°μ ꡬνλ λ‘μ§μ λ§λ€μ΄μ€¬λ€.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;
import java.util.StringTokenizer;
public class Main {
public static int[] arr = new int[100001];
/**
* μ΅μ κ°μ ꡬνκΈ°
*
* @param x
*/
public static void square(int x) {
int num = (int) Math.sqrt(x);
int min = 10001;
// μ κ³±κ·Όμ΄λΌλ©΄ 1κ°
if (num * num == x) {
arr[x] = 1;
} else if (num >= 2) {
for (int i = 2; i <= num; i++) {
int number = x - i * i;
if (arr[number] == 0) {
square(number);
}
if (arr[x - number] == 0) {
square(x - number);
}
min = Math.min((arr[number] + arr[x - number]), min);
}
arr[x] = min;
}
}
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 num = Integer.parseInt(br.readLine());
// 1, 2, 3μ ν κ°μ§ κ²½μ°μ μλ°μ μμΌλ―λ‘ μ΄κΈ°κ° μ€μ
arr[1] = 1;
arr[2] = 2;
arr[3] = 3;
square(num);
bw.write(String.valueOf(arr[num]));
bw.flush();
bw.close();
}
}
μ λ΅