본문 바로가기
개발/코딩테스트

백준 2839번: 설탕 배달 [JAVA]

by 로또 2023. 3. 16.

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

 

2839번: 설탕 배달

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

www.acmicpc.net

  • 코드 1
import java.util.Scanner;

public class Main {
	static int N; 
	static int cnt, remain;
	
	static void findCntMin() {
		int max = N/5; // 쓸 수 있는 5kg 봉지의 최댓값
		for (int i = max; i>=0; i--) {
			remain = N;
			remain -= 5*i;
			cnt += i;
			cnt += remain/3;
			remain -= (remain/3)*3;
			if (remain==0) break;
			cnt = 0;
		}
	}

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		// 입력
		N = sc.nextInt(); 
		
		// 최소 개수 찾기
		findCntMin();
		
		// 출력
		if (remain == 0) System.out.println(cnt);
		else System.out.println(-1);
		sc.close();
	}

}
  • 풀이

N을 더 큰 봉지인 5으로 나눠서 5kg 봉지를 가장 많이 쓸 수 있는 개수를 찾는다. 그리고 최대 개수부터 1개씩 줄여나가며 나머지를 작은 봉지인 3kg 봉지로 담을 수 있는 지 확인한다.

  • 코드 2
import java.util.Scanner;

public class B2839_설탕배달_길민지 {
	static int N; 
	static int cnt, remain;
	
	static void findCntMin() {
		while(remain!=0) {
			if (remain%5==0) { 
				cnt+=remain/5;
				break;
			}
			else if (remain>=3) {
				remain-=3;
				cnt++;
			}
			else {
				cnt = -1;
				break;
			}
		}
	}

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		// 입력
		N = sc.nextInt(); 
		
		// 최소 개수 찾기
		remain = N;
		findCntMin();
		
		// 출력
		System.out.println(cnt);
		sc.close();
	}
}
  • 풀이

남은 무게가 더 큰 봉지인 5kg으로 나눠 떨어진다면 5kg 봉지를 전부 사용한다. 만약 그렇지 않다면 작은 봉지인 3kg에 하나씩 담고 다시 3으로 나눠 떨어지는지 확인한다. 남은 무게가 3보다도 작다면 해결이 불가능하므로 -1이 된다.

댓글