[Baekjoon] 2839번 문제풀이 - 설탕 배달

2020. 8. 11. 14:33Computer Sciences/Problem Solve

 

이 문제는 생각보다 복잡했습니다. 쉽게 생각하면 쉬운데 어렵게 생각하면 끝도 없이 어렵더라구요.

문제 분석부터 해봅시다. 설탕을 옮기려는데 3kg 봉투와 5kg봉투로 딱 맞춰서 가져가려고 합니다. 이때 봉투의 개수를 최소화하여 가져갑니다. 만약 맞아떨어지지 않는다면 -1을 출력합니다. 쉽게 풀어쓰면 아래와 같습니다.

 

선임이 설탕을 담아야 하니 3kg와 5kg 봉투를 최소한으로 사용하려면 어떻게 해야되는지 업무를 줍니다. 5kg 봉투로 담는 것이 좋겠죠? 그래야 최소한으로 봉투를 사용할 수 있으니까요. 선임에게 설탕의 무게를 물어봅니다. 만약 설탕의 무게가 5kg으로 나누어 떨어진다면 봉투의 개수는 그 몫이 될 것이고, 몫만큼 봉투의 개수를 요청하면 됩니다. 아니라면 3kg 봉투에 설탕을 담고, 봉투 하나를 추가합니다. 이때 봉투에 설탕이 가득차지 않은 경우에는 선임에게 보고하고 작업을 끝냅니다. 아직 남은 설탕이 있다면 위의 작업을 반복합니다.

 

위의 알고리즘을 코드로 변환하면 아래와 같습니다.

 

import java.util.Scanner;

public class Baekjoon2839 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int weight = scanner.nextInt();
        int bag = 0;

        scanner.close();

        while (true) {
            if (weight % 5 == 0) {
                bag += weight / 5;
                break;
            }

            weight -= 3;
            bag++;

            if (weight < 0) {
                bag = -1;
                break;
            }
        }

        System.out.println(bag);
    }
}