Problem Solving

[백준/C] 2839번 - 설탕 배달

Jintiago 2022. 5. 14. 18:58

주어진 무게를 5kg, 3kg 짜리 설탕 포대를 조합하여 맞추어야 하는데, 개수가 최소가 되도록 해야 한다.

 

즉, 5kg짜리 포대는 최대한 많이, 3kg짜리 포대는 최대한 적게 조합해야 한다.

 

따라서, 주어진 무게에서 3 씩 빼 가며 5로 나누어 보아 나누어 떨어지면 그 때 까지 뺀 3의 개수 + 5로 나누었을 때의 몫이 출력되도록 했다.

 

주어진 무게에서 0이 될 때 까지 3을 계속 빼다 보니 만약 훨씬 큰 무게가 주어진다면 시간초과가 뜰 것 같다.

 

좀 비효율적인 방법이다. 더 수학적으로 접근해 볼 필요가 있다.

 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main() {
    int weight, new_weight, num_3kg = 0;

    scanf("%d", &weight);

    new_weight = weight;

    while (new_weight >= 3) {
        new_weight = weight - 3*num_3kg;
        if (new_weight % 5 == 0) {
            printf("%d\n", new_weight / 5 + num_3kg);
            return 0;
        }
        num_3kg++;
    }

    printf("-1\n");

    return 0;
}