https://www.acmicpc.net/problem/1463
import java.util.*;
class Main {
public static int[] cache = new int[1000001];
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
for (int i = 0; i < cache.length; i++) {
cache[i] = -1;
}
int n = sc.nextInt();
System.out.println(recursive(n));
}
public static int recursive(int n) {
if (n == 2 || n == 3) {
return 1;
}
if (n == 1) {
return 0;
}
if (cache[n] != -1) {
return cache[n];
}
int num = Integer.MAX_VALUE;
if (n % 3 == 0) {
num = 1 + recursive(n / 3);
}
if (n % 2 == 0) {
num = Math.min(num, 1 + recursive(n/2));
}
if (n > 1) {
num = Math.min(num, 1 + recursive(n -1));
}
return cache[n] = num;
}
}
최소값을 만들어야하기 때문에 재귀적으로 탈출조건을 만들어둔다.
해당하는 조건을 만족하지 못하면 +1을 한다.
'알고리즘 > Array' 카테고리의 다른 글
2×n 타일링 (0) | 2021.07.13 |
---|---|
치킨 쿠폰 (0) | 2021.07.13 |
1, 2, 3 더하기 (0) | 2021.07.12 |
배열에 한번만 등장하는 값 (0) | 2020.11.29 |
새 (0) | 2020.11.21 |