본문 바로가기
알고리즘/Array

1로 만들기

by e-pd 2021. 7. 12.

https://www.acmicpc.net/problem/1463

 

1463번: 1로 만들기

첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다.

www.acmicpc.net

 

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