코딩테스트/백준

[백준 2839] 설탕 배달 (S4)

34suuuuu 2025. 1. 18. 13:17

📍 문제 

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

 

📍 문제 풀이

 

배달하는 봉지의 최소 갯수를 찾기 위해서는 우선 5kg짜리로 가져갈 수 있는지 먼저 확인하고 3kg를 확인해야한다.

만약 설탕의 무게가 5kg로만 모두 가져갈 수 있다면 그 방법이 최소

그게 아니라면 3kg로 가져가야한다.

 

이 기본적인 로직을 가지고

1. 반복문 이용

2. DP 이용

두가지 방식으로 풀 수 있다.

 

📍 전체 코드

반복문 이용

import java.util.Scanner;

public class boj_2839 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int sugar = sc.nextInt();

		int result = 0;
		while (sugar > 0) {
			if (sugar < 3) {
				System.out.println(-1);
				return;
			}
			if (sugar % 5 == 0) {
				result += (sugar / 5);
				System.out.println(result);
				return;
			}
			sugar -= 3;
			result++;
		}
		System.out.println(result);
	}
}

 

DP 이용

import java.util.Arrays;
import java.util.Scanner;

public class boj_2839 {
	static final int maxVal = 9999;
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int sugar = sc.nextInt();

		if (sugar < 5) {
			if (sugar == 3) {
				System.out.println(1);
			} else {
				System.out.println(-1);
			}
			return;
		}

		int[] dp = new int[sugar + 1];
		Arrays.fill(dp, maxVal);
		dp[3] = dp[5] = 1;

		for (int i = 6; i < sugar + 1; i++) {
			dp[i] = Math.min(dp[i - 3], dp[i - 5]) + 1;
		}

		System.out.println(dp[sugar] > maxVal ? -1 : dp[sugar]);
	}
}