μκ³ λ¦¬μ¦
[Java] BOJ 7626 Four Squares
πκ·€π
2024. 7. 31. 23:09
λ¬Έμ
λ¬Έμ λ§ν¬ https://www.acmicpc.net/problem/17626
- λΌκ·Έλμ£Όλ 1770λ μ λͺ¨λ μμ°μλ λ· νΉμ κ·Έ μ΄νμ μ κ³±μμ ν©μΌλ‘ ννν μ μλ€κ³ μ¦λͺ νμλ€.
- μ΄λ€ μμ°μλ 볡μμ λ°©λ²μΌλ‘ ννλλ€.
- μλ₯Ό λ€λ©΄, 26μ 52κ³Ό 12μ ν©μ΄λ€; λν 42 + 32 + 12μΌλ‘ ννν μλ μλ€.
- μμ¬μ μΌλ‘ μμ°μ λͺ μλ€μκ² κ³΅ν΅μ μΌλ‘ μ£Όμ΄μ§λ λ¬Έμ κ° λ°λ‘ μμ°μλ₯Ό λ· νΉμ κ·Έ μ΄νμ μ κ³±μ ν©μΌλ‘ λνλ΄λΌλ κ²μ΄μλ€.
- 1900λ λ μ΄λ°μ ν μμ°κ°κ° 15663 = 1252 + 62 + 12 + 12λΌλ ν΄λ₯Ό ꡬνλλ° 8μ΄κ° κ±Έλ Έλ€λ λ³΄κ³ κ° μλ€.
- μ’ λ μ΄λ €μ΄ λ¬Έμ μ λν΄μλ 56μ΄κ° κ±Έλ Έλ€: 11339 = 1052 + 152 + 82 + 52.
- μμ°μ nμ΄ μ£Όμ΄μ§ λ, nμ μ΅μ κ°μμ μ κ³±μ ν©μΌλ‘ νννλ μ»΄ν¨ν° νλ‘κ·Έλ¨μ μμ±νμμ€.
- μ λ ₯μ νμ€μ λ ₯μ μ¬μ©νλ€. μ λ ₯μ μμ°μ nμ ν¬ν¨νλ ν μ€λ‘ ꡬμ±λλ€. μ¬κΈ°μ, 1 ≤ n ≤ 50,000μ΄λ€.
- μΆλ ₯μ νμ€μΆλ ₯μ μ¬μ©νλ€. ν©μ΄ nκ³Ό κ°κ² λλ μ κ³±μλ€μ μ΅μ κ°μλ₯Ό ν μ€μ μΆλ ₯νλ€.
μμ΄λμ΄
- n + 1 ν¬ν€μ λ°°μ΄μ μ κ³±μμ κ°μλ₯Ό μ μ₯νκΈ° μν΄ μμ±νλ€.
- κ·Έλ¦¬κ³ λ°°μ΄μ 1λΆν° nκΉμ§ μ΄κΈ°κ°μ λ³ΈμΈμ μλ‘ μ μ₯νλ€.
- μλνλ©΄ μ μΌ ν° κ²½μ°μ μκ° 1μ μ κ³±μΌλ‘ ν©μ λνλ΄λ κ²μ΄κΈ° λλ¬Έμ΄λ€.
- κ·Έλ¦¬κ³ μ΄μ€ forλ¬Έμ μ¬μ©νμ¬ iλ²μ§Έ λ°°μ΄μ iλ²μ§Έ λ°°μ΄μ κ°κ³Ό i - j * j λ²μ§Έ λ°°μ΄ κ°μ 1μ λν κ°κ³Ό λΉκ΅ν΄μ λ μμ κ°μ μ μ₯νλ€.
- μ κ³±μκ° κΈ°μ‘΄ μ«μλ³΄λ€ ν¬λ©΄ μλλ―λ‘ jμ λ²μλ j * j κ° iλ³΄λ€ μμ λκΉμ§λ‘ μ ννλ€.
κ²ͺμ μνμ°©μ€
- μ²μμλ iλ²μ§Έ λ°°μ΄μ μ«μκ° κ·μΉμ±μ΄ μμκΉ μΆμ΄μ μ΄μ¬ν μ°Ύμλ΄€μ§λ§ μ€ν¨νμκ³ ... λ¬Έμ λ₯Ό 보μλ§μ λ μ¬λ Έλ 'λ°°μ΄μ μ΄μ κ°μ + 1μ νμ¬ νλ©΄λμ§ μμκΉ'λ μκ°μ νμ©ν΄μ νμλ€
- κ·Όλμ νμλ dpλ¬Έμ μ€μμ μ μΌ μ΄λ ΅κ² νμλ κ² κ°λ€ γ γ
μ½λ
import java.io.*;
import java.util.*;
public class BOJ17626 {
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// μ
λ ₯κ°
int n = Integer.parseInt(br.readLine());
// μ κ³±κ°μ κ°μλ₯Ό μ μ₯ν λ°°μ΄
int arr[] = new int[n + 1];
// λ°°μ΄μ iλ²μ§Έ κ°μ iκ°μΌλ‘ μ μ₯
// μ΅λ νμν κ°μλ 1μ μ κ³±μΌλ‘ λ€ μ±μ°λ κ²½μ°μ΄λ―λ‘
for(int i = 1; i <= n; i++){
arr[i] = i;
}
for(int i = 1; i <= n; i++){
// μ κ³±μκ° κΈ°μ‘΄κ°λ³΄λ€ ν¬λ©΄ μλλ―λ‘
// j * j κ° iλ³΄λ€ μκ±°λ κ°μλκΉμ§ λ°λ³΅
for(int j = 1; j * j <= i; j++){
// iλ²μ§Έ λ°°μ΄μ κ°μ iλ²μ§Έ λ°°μ΄μ κ°κ³Ό
// iλ²μ§Έ λ°°μ΄μμ jμ μ κ³±κ°μ λΊ κ°μμ 1 λνκ° μ€
// λ μμ κ°μ μ μ₯
arr[i] = Math.min(arr[i], arr[i - j * j] + 1);
}
}
System.out.println(arr[n]);
}
}