탕구리's 블로그

백준 알고리즘 1463번 동적계획법 기초 본문

Algorithm

백준 알고리즘 1463번 동적계획법 기초

탕구리당 2017. 7. 20. 21:05
반응형

동적계획법(Dynamic Programming) 기초



이 문제도 Top-Down 방식을 통해 해결 하였는데... 내가 생각한 Top-Down이 이게 맞는지 모르겠다.

입력 받은 N을 기준으로

각각, 3으로 나누기, 2로 나누기, 1을 빼기

세 가지 방법을 시작으로 연산을 시작한다. 하나만 하는 것이 아니고


(3가지 방법을 모두 진행해 보고 그 중 최소값을 배열에 담아 두는 방식)


예를 들면 3을 1로 만드는 연산 방법은

3 / 3 = 1 의 방법과

(3 -1) / 2 의 방법이 있기 때문에


그 중 연산횟수가 최소가 되는 첫 번째 방법의 연산 횟수가 구하고자 하는 출력 값이 된다.





import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class num_1463
{
    static public void main(String args[]) throws IOException
    {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        int T = Integer.parseInt(in.readLine());
        int[] dp = new int[T+1];

        System.out.print(resolve(T,dp));

    }
    static int resolve(int n,int[] dp)
    {
        if( n == 1) return 0;
        if (dp[n] > 0)
        {
            return dp[n];
        }
        dp[n] = resolve(n-1,dp)+1;

        if(n%3 == 0)
        {
           Math.min(dp[n],resolve(n/3,dp)+1);
        }
        if(n%2 == 0)
        {
            Math.min(dp[n],resolve(n/2,dp)+1);
        }
        return dp[n];
    }
}


반응형
Comments