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

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

님남누 2023. 7. 14. 10:28

문제

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

 

2839번: 설탕 배달

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

www.acmicpc.net


문제 설명

n 킬로그램의 설탕이 주어졌을 때 5kg과 3kg으로 나누어

정확히 0kg의 설탕으로 만들 수 있으면 각각의 설탕 봉지 개수를

만들 수 없다면 -1을 출력하면 된다.


코드

#include <iostream>

using namespace std;

int main() {
    int n; cin >> n;

    int kg3 = 0, kg5 = 0;

    while (n > 1) {
        if ((n % 5) == 0) {
            n -= 5;
            kg5++;
        }

        else {
            n -= 3;
            kg3++;
        }
    }

    if (n == 0) cout << kg3 + kg5 << '\n';
    else cout << -1 << '\n';
}

코드 설명

설탕이 남아있으면 안되기 때문에 n이 1 이상일 때 반복하는 while문을 넣었다.

이제 중요한 것은 조건문인데, 문제에 '5kg으로 뺄 수 있으면 우선적으로 5kg 뺀다'라는 요구 사항이 있다.

그래서 먼저 n에서 5를 빼주는데, 단 n을 5로 나눈 나머지가 0일 때만 빼주고 그 외에는 3을 뺀다.

만약 해당 조건을 두지 않으면 n이 6인 상황에서 5를 빼고 1이 남아 결과값으로 -1을 출력하는 불상사가 발생한다.

그 이후에는 3kg 봉지 개수와 5kg 봉지 개수를 더해 출력하면 코드는 끝이 난다.


추가로 생각해 볼 것

내 코드는 3과 5를 반복적으로 빼주기 때문에 브루트포스 알고리즘에 더 가까운 것 같다.