[ Baekjoon ] 2839번 ( Bronze I ) : 설탕 배달 (Java)

ma.caron_g·2022년 1월 18일
0
post-thumbnail

1. Problem 📃

[ 설탕 배달 ]

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


[ 문제 ]

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

상근이는 귀찮기 때문에, 최대한 적은 봉지를 들고 가려고 한다.
예를 들어, 18킬로그램 설탕을 배달해야 할 때, 3킬로그램 봉지 6개를 가져가도 되지만, 5킬로그램 3개와 3킬로그램 1개를 배달하면, 더 적은 개수의 봉지를 배달할 수 있다.

상근이가 설탕을 정확하게 N킬로그램 배달해야 할 때, 봉지 몇 개를 가져가면 되는지 그 수를 구하는 프로그램을 작성하시오.

2. Input 📇

[ 입력 ]

첫째 줄에 N이 주어진다. (3 ≤ N ≤ 5000)


3. Output 📠

[ 출력 ]

상근이가 배달하는 봉지의 최소 개수를 출력한다. 만약, 정확하게 N킬로그램을 만들 수 없다면 -1을 출력한다.


4. Example 📚

[ 입출력 예시 ]

예제 입력예제 출력
184
4-1
62
93
113

5. Solution 🔑

11개를 기준으로 생각해보았다.
5로 나누고 나머지를 3으로 나누어 보려 하였는데, 5*2개를 빼면 마지막에 1개가 남아서 -1이 리턴이 된다.
하지만 11은 5, 3, 3으로 3봉지를 만들 수 있는데 말이다. 그래서 빼기가 아니고 개수를 5로 나눈 나머지를 이용해야겠다는 생각을 했다.


1. 설탕의 개수(sugar)를 선언하여 값을 입력받는다.
그 후 5kg의 개수(five),와 3kg의 개수(three)를 0으로 초기화하여 선언한다.


2. 설탕의 개수가 양수 일 때 5로 나누었을 때, 나누어 떨어지지않는다면, 3을 빼고, 3kg 봉지(three)를 증가 시켜준다.
그러다 sugar가 5로 나누어 떨어질 때, 5로 나누어 주면 가장 작은 수의 봉지에 담을 수 있다.


3. while을 통과하고 sugar의 값이 음수가 됐을 수 있다. 따라서 sugar가 0이 아니라면, 깔끔하게 채울 수 없는 경우가 되므로 -1을 출력해주고 그렇지 않다면 five와 three를 합한 값을 출력해준다.


6. Code 💻

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

public class Main {

	public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        int sugar = Integer.parseInt(br.readLine());
        int five = 0;
        int three = 0;
        
        while(sugar % 5 != 0 && sugar>0) {
        	sugar -= 3;
        	three++;
        }
        five = sugar / 5;
        sugar = sugar % 5;
        
        if(sugar < 0) {
        	System.out.println(-1);
        }
        else {
        	System.out.println(five + three);
        }
    }

}
profile
다른 사람이 만든 것을 소비하는 활동보다, 내가 생산적인 활동을 하는 시간이 더 많도록 생활화 하자.

0개의 댓글