알고리즘/동적 프로그래밍

[BOJ 1463] 1로 만들기 (Java, DP)

leejinwoo1126 2023. 6. 30. 21:28
반응형

 

 


문제 링크

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

 

1463번: 1로 만들기

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

www.acmicpc.net


문제 풀이

- 상향식(Bottom-up)으로 DP 풀이

- 시간복잡도 O(N)

 

*DP 배열 결과

idx 0 1 2 3 4 5 6 7 8 9 10
DP 0 0 1 1 2 3 2 3 3 2 3

제출 코드

import java.util.*;
import java.io.*;

public class Main {
    
    static int N;

    static int[] DP;

    static void input() throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        N = Integer.parseInt(br.readLine());
    }

    static void pro() {
        DP = new int[N + 1];
        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]);
    }

    public static void main(String[] args) throws Exception {
        input();
        pro();
    }
    
}
반응형