Koala - 7기/기초 알고리즘 스터디

백준/C++14 2839번 설탕 배달

KwonPodo 2022. 7. 8. 23:40

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

 

2839번: 설탕 배달

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

www.acmicpc.net

코드

#include <iostream>
#include <string>
using namespace std;

int main()
{
    int n, sum = 0;
    cin >> n;

    while (n > 0)
    {
        if ((n % 5) % 3 == 0)
        {
            sum += n / 5;
            n %= 5;
            sum += n / 3;
            n %= 3;
        }
        else 
        {
            if (n - 3 < 0)
            {
                cout << -1;
                return 0;
            }
            n -= 3;
            sum++;
        }
    }

    cout << sum;

    return 0;
}

풀이

맨처음에는 아주 단순하게 접근했다가 틀렸다,,

요지는 결국 최소한의 총 봉투 수로 n을 나눠담아야 하는 것이기에 5kg 봉투를 최대로, 3kg 봉투를 최소한으로 가져가는 것을 목표로 한다.

로직은 다음과 같다. 

1. 5로 나눠지며 나눠진 수가 또 3으로 나눠진다면 바로 깔끔하게 5kg 봉투를 최대한으로 갖고 3kg 봉투를 최소한으로 갖는 봉투 수를 구할 수 있다.

2. 만약 위처럼 나눠지지 않는다면, 어쩔 수 없이 3kg 봉투를 하나 추가하고 ( n -= 3) 1번 분기로 돌아가 다시 테스트 해본다.

3. 계속해서 5kg봉투를 최대한 많이 쓰는 방향으로 루프를 돌리지만, 만약 n -= 3을 계속 했는데도 1번 분기를 만족하지 않고 음수가 나온다면 이는 5kg 봉투와 3kg 봉투로 나눠담을 수 없는 n이기에 -1을 출력한다.