Algorithm, boj, 1로만들기(1463)
풀이
- 4 => 4/2=2, 2/2=1 또는 4-1=3, 3/3=1 두가지 방법이 있다
- 2로 나누어지면 ==>
dp[i] = Math.min(dp[i-1]+1, dp[i/2]+1);
- 3으로 나누어지면 ==>
dp[i] = Math.min(dp[i-1]+1, dp[i/3]+1);
- 2,3으로 나누어지지 않으면 dp[i] = dp[i-1]+1;
배운점
- 예제를 나열하고 규칙이 보이지 않으면 점화식을 생각해보자…!!!
package org.baekjoon;
import java.util.Scanner;
public class test1463 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
int[] dp = new int[num+1];
dp[1] = 0;
for (int i=2; i<num+1; i++) {
dp[i] = dp[i-1]+1;
// 해당 숫자가 2로 나눠떨어진다면, 2로나누거나, -1하는 방법 두가지가있다
if (i % 2 == 0)
dp[i] = Math.min(dp[i-1]+1, dp[i/2]+1);
else if (i % 3 == 0)
dp[i] = Math.min(dp[i-1]+1, dp[i/3]+1);
}
System.out.println(dp[num]);
}
}
Reference