https://www.acmicpc.net/problem/1463
접근 방식
다이나믹 프로그래밍으로 생각하여 풀이하였다.
소스 코드
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int N = scanner.nextInt();
int[] dp = new int[1000001];
dp[0] = 0;
dp[1] = 0;
for (int i = 2; i <= N; 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[N]);
}
}
반응형
'Tech > Problem Solving' 카테고리의 다른 글
[백준 2206] 벽 부수고 이동하기 (Java) (0) | 2020.02.25 |
---|---|
[백준 2579] 계단 오르기 (Java) (0) | 2020.02.21 |
[백준 1003] 피보나치 함수 (Java) (0) | 2020.02.21 |
[백준 6588] 골드바흐의 추측 (Java) (0) | 2020.02.14 |
[백준 1644] 소수의 연속합 (Java) (0) | 2020.02.14 |