main
[백준-1463번/Java] 1로 만들기 본문
* 다이나믹 프로그래밍
* 1부터 N까지 3가지 연산의 최소 연산 횟수를 비교하면서 저장한다. (1의 경우는 연산횟수가 0이다.)
* 이전 연산이 없는 경우 예외 처리
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
Scanner scan = new Scanner(System.in);
int N = scan.nextInt();
int count = 0;
int[] dp = new int[N + 1];
for (int i = 2; i < dp.length; i++) {
int case1 = i % 2 == 0 ? (i / 2 > 1 ? dp[i / 2] : 0) : 1000001;
int case2 = i % 3 == 0 ? (i / 3 > 1 ? dp[i / 3] : 0) : 1000001;
int case3 = i - 1 > 0 ? dp[i - 1] : 0;
dp[i] = Math.min(Math.min(case1, case2), case3) + 1;
}
System.out.println(dp[N]);
}
}
728x90
'Algorithm' 카테고리의 다른 글
[백준-1699번/Java] 제곱수의 합 (0) | 2022.11.15 |
---|---|
[인프런/Java] 특정 문자 뒤집기 (0) | 2022.11.15 |
[백준-10814번] 나이순 정렬 (0) | 2022.11.15 |
[백준-2559번/Java] 수열 (0) | 2022.11.15 |
[백준-11659번/Java] 구간 합 구하기 4 (0) | 2022.11.14 |
Comments