상근이는 포장된 설탕을 배달하는 일을 한다.
정확하게 N kg의 설탕을 배달해야 하는데, 설탕은 5kg과 3kg으로 포장되어 있다.
규칙 1. 상근이는 최대한 적은 개수의 봉지로 N kg을 만들어 배달한다.
규칙 2. 정확하게 N kg가 되지 않는 경우에는 배달하지 않는다.
입력으로 숫자 N 이 주어질 때,
상근이가 가져갈 봉지의 개수를 구하는 프로그램을 작성하시오.
제약:
시간 제한 1초, 메모리 제한 128MB
3 <= N <= 5000
예제 1 입력. | 예제 1 출력. |
18 | 4 |
예제 2 입력. | 예제 2 출력. |
4 | -1 |
예제 3 입력. | 예제 3 출력. |
6 | 2 |
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
#include <iostream>
using namespace std;
int main()
{
int N, nAnswer, nMaxFive;
cin >> N;
// 정답이 없는 경우에 출력할 값을 초기 값으로 설정.
nAnswer = -1;
// N에 들어갈 수 있는 5의 최대 개수.
nMaxFive = N / 5;
switch (N % 5) // 5로 나누었을 때 나머지에 따라 case 별로 계산.
{
case 0:
nAnswer = N / 5;
break;
case 1:
if ((nMaxFive - 1) >= 0)
{
// 5 * (몫 - 1)개 + 3 * (2)개
nAnswer = (nMaxFive - 1) + 2;
}
break;
case 2:
if ((nMaxFive - 2) >= 0)
{
// 5 * (몫 - 2)개 + 3 * (4)개
nAnswer = (nMaxFive - 2) + 4;
}
break;
case 3:
if ((nMaxFive) >= 0)
{
// 5 * (몫)개 + 3 * (1)개
nAnswer = (nMaxFive) + 1;
}
break;
case 4:
if ((nMaxFive - 1) >= 0)
{
// 5 * (몫 - 1)개 + 3 * (3)개
nAnswer = (nMaxFive - 1) + 3;
}
break;
default:
break;
}
// 답 출력.
cout << nAnswer << endl;
return 0;
}
|
cs |
문제 원본 링크:
'알고리즘 문제풀이' 카테고리의 다른 글
[알고리즘] 백준 1978번 "소수 찾기" (C/C++) - Don 임베디드 (2) | 2022.03.22 |
---|---|
[알고리즘] 백준 10757번 "큰 수 A+B" (C/C++) - Don 임베디드 (4) | 2022.03.19 |
[알고리즘] 백준 2775번 "부녀회장이 될테야" 문제 풀이 (C/C++) - Don 임베디드 (4) | 2022.03.15 |
[알고리즘] 백준 10250번 "ACM 호텔" 문제 풀이 (C/C++) - Don 임베디드 (2) | 2022.03.14 |
[알고리즘] 백준 2869번 "달팽이는 올라가고 싶다." (C/C++) - Don 임베디드 (2) | 2022.03.09 |