티스토리 뷰

알고리즘/백준

백준 2839 (설탕 배달) - java

김다미김태리신시아 2023. 1. 6. 03:18

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

 

2839번: 설탕 배달

상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그

www.acmicpc.net

3으로 나눠지는 경우 / 5로 나눠지는 경우 / dp[i-3]의 값이 1 이상인 경우 / dp[i-5]의 값이 1 이상인 경우 중에 최솟값을 구하면 된다.

 

import java.io.*;
import java.util.*;
public class Main {
    static int[] dp = new int[5001];
    static int n= 0;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        n = Integer.parseInt(br.readLine());
        dp[3] = 1;
        dp[5] = 1;
        for(int i=4;i<=n;i++)
        {
            int n1=5001,n2=5001,n3=5001,n4=5001;
            if(i%3==0) // 3으로 나눠지는 경우
            {
                n1 = i/3;
            }
            if(i%5==0) // 5로 나눠지는 경우
            {
                n2 = i/5;
            }
            if(i-3>=3&&dp[i-3]!=0) // dp[i-3]이 1 이상인 경우
            {
                n3 = dp[i-3]+1;
            }
            if(i-5>=5&&dp[i-5]!=0) // dp[i-5]이 1 이상인 경우
            {
                n3 = dp[i-5]+1;
            }
            int re = Math.min(Math.min(n1,n2),Math.min(n3,n4)); // 경우중 최솟값
            if(re!=5001)
            {
                dp[i]=re;
            }
        }
        if(dp[n]==0)
        {
            System.out.println(-1);
        }
        else{
            System.out.println(dp[n]);
        }

        br.close();
    }
}