알고리즘/백준 풀이(동적 프로그래밍)
백준 1463번 - 1로 만들기
공부 기록장
2023. 12. 29. 21:43
https://www.acmicpc.net/problem/1463
1463번: 1로 만들기
첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다.
www.acmicpc.net
예를 들면 4의 경우 2로 나눌 수도 있고 -1을 해서 최솟값을 찾을 수 있다.
그렇게 되면 (2의 최솟값, 3의 최솟값) 중에서 최솟값을 찾아 +1 을 하면 그 숫자의 최솟값을 구할 수 있다.
5의 경우의 수
4의 최솟값+1
6의 경우의 수
( 5의 최솟값, 2의 최솟값, 3의 최솟값 ) 중 최솟값 +1
7의 경우의 수
6의 최솟값+1
8의 경우의 수
7의 최솟값+1
...
코드
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
int dp[] = new int[num+1];
dp[0]=dp[1]=0;
for(int i=2;i<=num;i++)
{
dp[i]=dp[i-1]+1;
if(i%2==0)
{
dp[i]=Math.min(dp[i], dp[i/2]+1);
}
if(i%3==0)
{
dp[i]=Math.min(dp[i], dp[i/3]+1);
}
}
System.out.println(dp[num]);
}
}