2839번: 설탕배달 -> https://www.acmicpc.net/problem/2839

사칙연산 분류를 통해 들어가면 나누기/ 나머지를 사용하세요라는 힌트를 살짝얻을수 있습니다.


우선 한글로 설명하면

5kg으로 딱 나눠떨어지면 당연히 최소개수니 끝이겠죠?

딱 나눠떨어지지않는다면 5kg를 1개씩 줄이면서 남은 나머지가 3으로 나눠지는지 확인합니다

나눠떨어지는순간 반복문을 나와서 5kg와 3kg의 개수를 더해 출력하면됩니다.(총개수)

그렇게 마지막까지 안나눠떨어지면 -1을 출력.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <iostream>
using namespace std;
 
main()
{
    int n;
    int result;
    int c = 0;
    cin >> n;
 
    for (int i = n / 5; i >= 0; i--)
    {
        if (n%5 ==0)
        {
            result = n / 5;
            c = 1;
            break;
        }
        else
        {
            int k = n - (5 * i);
            for (int j = k / 3; j >= 0; j--)
            {
                if (k % 3 == 0)
                {
                    result = i + k / 3;
                    c = 1;
                    break;
                }
                else
                    result = -1;
            }
        }
        if (c == 1)
            break;
    }
 
    cout << result;
}
cs


n은 입력받은 총 설탕의 양, result는 출력할 값, c는 2중for문을 빠져나오기위해 대충 만들었습니다.

i는 5kg의 개수, j는 3kg의 개수. 로직은 위의 설명과 같습니다. 

Posted by misty_
,