[λ°±μ€/Java] 1λ‘ λ§λ€κΈ° 1463
λ¬Έμ
https://www.acmicpc.net/problem/1463
1463λ²: 1λ‘ λ§λ€κΈ°
첫째 μ€μ 1λ³΄λ€ ν¬κ±°λ κ°κ³ , 106λ³΄λ€ μκ±°λ κ°μ μ μ Nμ΄ μ£Όμ΄μ§λ€.
www.acmicpc.net
νμ΄
dp[n] = Math.min(recur(n / 3), recur(n - 1)) + 1;
μ΄λ κ² μ μ§ μκ³
dp[n] = Math.min(recur(n - 1), recur(n / 3)) + 1;
μ΄λ κ² recur(n - 1)μ΄ μμ μ¨λ€λ©΄, 0λΆν° n - 1κΉμ§ λͺ¨λ νμλκΈ° λλ¬Έμ μκ° μ΄κ³Όκ° λλ€.
κ·Έλμ μ°μ recur(n / 3)μ΄λ recur(n / 2) μ λ¨Όμ ν΄μ λΆλΆμ λ©λͺ¨μ΄μ μ΄μ μ ν λ€μ, recur(n - 1)μ ν΄μ£Όλ©΄ μ΄λ―Έ νμν λΆλΆμ΄ μμΌλ©΄ κ·Έ κ°μ΄ λ°νλλ―λ‘ νμμ΄ λ κ±Έλ¦¬κ² λλ€.
λ©λͺ¨μ΄μ μ΄μ (memoization)μ΄λ?
μ»΄ν¨ν° νλ‘κ·Έλ¨μ΄ λμΌν κ³μ°μ λ°λ³΅ν΄μΌ ν λ, μ΄μ μ κ³μ°ν κ°μ λ©λͺ¨λ¦¬μ μ μ₯ν¨μΌλ‘μ¨ λμΌν κ³μ°μ λ°λ³΅ μνμ μ κ±°νμ¬ νλ‘κ·Έλ¨ μ€ν μλλ₯Ό λΉ λ₯΄κ² νλ κΈ°μ
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main {
static Integer[] dp;
public int recur(int n) {
if (dp[n] == null) {
if (n % 6 == 0) {
dp[n] = Math.min(recur(n - 1), Math.min(recur(n / 3), recur(n / 2))) + 1;
} else if (n % 3 == 0) {
dp[n] = Math.min(recur(n / 3), recur(n - 1)) + 1;
} else if (n % 2 == 0) {
dp[n] = Math.min(recur(n / 2), recur(n - 1)) + 1;
} else {
dp[n] = recur(n - 1) + 1;
}
}
return dp[n];
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
Main m = new Main();
dp = new Integer[n + 1];
dp[0] = dp[1] = 0;
int answer = m.recur(n);
System.out.println(answer);
}
}
μ λ΅