본문 바로가기
코딩테스트 준비/백준

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

by 스테디코디스트 2023. 7. 15.
반응형

<문제 소개>


<소스 코드>

#include <iostream>
#include <string>
#include <vector>
#include <sstream>
#include <map>
#include <cmath>
#include <stack>
#include <queue>
#include <algorithm>
#include <cstdlib>
using namespace std;

int main()
{	
	int N; // 설탕의 갯수
	cin >> N;

	int count = 0; // 봉지의 갯수

	for (int i = N / 5; i >= 0; i--)
	{
		int res = N - (i * 5); // 남은 설탕의 갯수

		if (res % 3 == 0)
		{
			// 남은 설탕이 없는 경우
			count = i + res / 3;
			cout << count;
			break;
		}
	}

	if (count == 0) cout << -1;

	return 0;
}

<이전 풀이 소스코드>

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

int main()
{    
    int N;
    cin >> N;
    assert(N >= 3 && N <= 5000);
    
    int sum = 0; // 봉지의 갯수
    int k = 0; // 남은 킬로그램

    
    if (N % 5 == 0)
    {
        // 5로 나누어 떨어지는 경우
        sum = N / 5;
        cout << sum;
        return 0;
    }
    else
    {
        // 3,5 섞어서 해야하는 경우 + 3으로 나누어 떨어지는 경우
        for (int i = N / 5; i >= 0; i--)
        {
            int p = N - (5 * i);

            if (p % 3 == 0)
            {
                cout << i + (p / 3);
                return 0;
            }
        }

        // 나누어 떨어지지 않는 경우
        cout << -1;
    }    

    return 0;
}

<풀이과정>

1. 5킬로그램 봉지의 갯수 i를 N/5부터 0까지 감소시키면서 남은 설탕의 갯수인 N-(i*5)를 구해서 res에 담는다.

2. res가 3으로 나누어 떨어지면 5킬로그램으로 나눈 봉지의 갯수인 i와 res를 3으로 나누어서 구한 3킬로그램 봉지로 담은 갯수를 더한 i+res/3을 출력해주고 빠져나간다.

3. 만약 끝까지 설탕을 담지못해서 봉지의 갯수가 0이라면 -1을 출력한다.


 

<코멘트>

예전에 풀었던 건데 아래처럼 써있길래 브루트포스로 다시 풀어보았다!

근데 이전 코드를 보니 이번과 거의 똑같이 푼듯ㅋㅋㅎㅋㅋ