본문 바로가기

코딩테스트/백준

[백준-자바] 2839번 설탕 배달 / 2022.01.27

 

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

 

2839번: 설탕 배달

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

www.acmicpc.net

 

 

import java.util.*;

public class Main {
    public static void main(String[] args) {
    	Scanner sc = new Scanner(System.in);
    	int kg = sc.nextInt();
    	int bong = 0; // 몇 봉지?
    	
    	while(true) {
    		if(kg%5 == 0) {     // 5kg에 담을 수 있으면 다 담기
    			bong += kg/5;
    			break;
    		}
    		else {       // 3kg에 담음
    			kg -= 3;
    			bong++;
    		}
    		
    		if(kg<0) {   // 나누어 담을 수 없는 무게
    			System.out.println(-1);
    			return;
    		}
    			
    	}
    	
    	System.out.println(bong);
    }
}

 

풀이 : 

상근이는 설탕을 배달하는데, 설탕 봉지는 두 개의 종류가 있다 : 3kg or 5kg
-> 따라서 설탕을 3kg와 5kg 봉지에 나누어 담아야 하는데 나누어 담은 봉지의 개수(배달해야하는)가 최소가 되어야한다.

int kg // 배달해야하는 설탕의 무게
int bong // 배달해야하는 봉지의 개수 (이것이 최소가 되도록) 

1. 설탕을 5kg봉지에 많이 담을 수록 배달해야하는 봉지의 수가 적어진다

2. 5kg에 많이 담는법 
설탕의 무게에서 3씩 감소시키다가 (3kg봉지에 담음) -> 무게가 5의 배수가 된다면? (kg%5==0) -> 5kg봉지에 다 담으면 됨

ex) 배달해야하는 설탕의 무게가 18이라면?
18 - 3 = 15 
15는 5의 배수 -> 다 5kg봉지에 나누어 담기 (kg/5)
봉지의 개수 = 1(3kg짜리) + 3(5kg짜리) = 총 4봉지
설탕의 무게가 (kg) 0이 된다면 첫번째 if문에 걸리게되어 무한루프가 종료된다

 

3. 배달해야하는 무게가 3kg 봉지와 5kg 봉지에 나누어 담을 수 없다면 ?
설탕의 무게를 3씩 감소시키다보면 무게가 음수가 된다
이때 -1를 출력하고 종료시키면된다. (해당 무게는 3kg에 다 나누어 담을 수도 5kg에 다 나누어 담을수도 3kg와 5kg에 나누어 담을 수 없는 무게이다)

ex) kg = 4 
4 - 3 = 1 
1 - 3 = -2