백준 온라인 저지의 2839번 설탕 배달 문제입니다.
[링크] https://www.acmicpc.net/problem/2839
문제 조건과 설명
- 사탕가게에서 설탕을 정확하게 N킬로그램을 배달해야 합니다.
- 이 설탕은 봉지에 담겨져 있는데, 봉지는 3kg와 5kg 가 있습니다.
- N킬로그램을 배달하는데, 최소한의 봉지를 들고 가려고 합니다.
- 예를 들어 18kg을 배달해야 한다면 3kg 봉지 6개도 되지만, 5kg 1개와 3kg 1개를 달하면 더 적은 수의 봉지를 들 수 있습니다.
Input
첫째 줄에 N이 주어집니다. (3<=N<=5,000)
Output
배달하는 봉지의 최소 갯수를 출력하고, 만약 정확하게 Nkg를 만들 수 없으면 -1을 출력합니다.
생각한 아이디어
5kg 봉지가 많다면 가장 올바른 결과가 될 것입니다.
만약에 N이 5로 나누어 떨어진다면 볼 필요도 없이 그 몫이 정답입니다.
즉, 5kg 봉지로만 봉지를 마련하면 됩니다.
만약 처음에 5로 나누어 떨어지지 않았다면, N에서 3을 차감하고 3kg 봉지 수 카운트를 증가시킨 뒤 다시 그것을 5로 나누었을 때 나누어 떨어지는지 아닌지 판단합니다.
그 과정을 거치다가 N이 3보다 작아지게 되면 -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
#include <stdio.h>
int main() {
int N;
int cnt_3 = 0;
int cnt_5 = 0;
scanf("%d", &N);
while (N % 5 != 0) {
N = N - 3;
cnt_3++;
if (N < 3 && N != 0) {
printf("-1");
return 0; // 그냥 return으로 쓰면 백준에서는 런타임 에러가 뜰 것이다.
}
}
cnt_5 = N / 5;
printf("%d",cnt_5 + cnt_3);
return 0;
}