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]);
}
}
'알고리즘 > 백준 풀이(동적 프로그래밍)' 카테고리의 다른 글
백준 2839번 - 설탕 배달 (1) | 2023.12.30 |
---|---|
백준 2579번 - 계단 오르기 (1) | 2023.12.30 |
백준 9095번 - 1, 2, 3 더하기 (0) | 2023.12.29 |
백준 2748번 - 피보나치 수 2 (0) | 2023.11.29 |
백준 2775번 - 부녀회장이 될테야 (1) | 2023.11.28 |