예제 입력
18
예제 출력
4
해결 방법
방법 A : 우선 더 큰 봉지인 5킬로그램으로 전체 무게가 나누어떨어지는지 확인합니다.
방법 B : 그렇지 않을 경우, 3킬로그램으로 한 번 덜어내고 위 조건문을 다시 반복합니다.
5킬로그램으로 확인하는 이유는 다음과 같습니다.
18킬로그램을 기준으로, 18은 5로 나누어떨어지지 않기 때문에 더 작은 봉지로 덜어내어
18 - 3을 한 후 다시 확인합니다. 15 / 5는 5으로 나누어떨어지며 그 몪은 3이기에, 필요한 봉지는 1 + 3 = 4봉지입니다.
3킬로그램으로 나누어떨어지는지 확인하면 18 / 3 = 6으로 최소 개수가 아닌 결과가 나오기 때문에,
"최소 개수"를 출력하기 위해 5킬로그램으로 확인하였습니다.
또한 만들 수 없는 경우도 위 방법으로 확인할 수 있습니다. (예: 4킬로그램)
4는 5로 나누어떨어지지 않기에 3킬로그램으로 덜어내면 1이 됩니다. 1 또한 나누어떨어지지 않기에 1 - 3 = -2,
방법 C : 즉 음수가 나오게 되므로 5와 3킬로그램 봉지로는 덜어낼 수 없습니다. 이런 경우에는 -1을 출력합니다.
코드
#include <stdio.h>
int main(){
int w, cnt = 0;
scanf("%d", &w);
while (w > 0){
if (w % 5 == 0){ // 방법 A
cnt += w / 5;
break;
}
else{
w -= 3; // 방법 B
cnt++;
}
}
if (w < 0) printf("-1"); // 방법 C
else printf("%d", cnt);
}
5로 무게가 나누어떨어지는 순간 break으로 while에서 빠져나오기 때문에,
만들 수 있는 경우에는 무게를 저장한 변수 w가 0보다 크거나 같습니다.
'코딩 > 백준' 카테고리의 다른 글
[백준][C] 2581. 소수 (0) | 2022.10.04 |
---|---|
[백준][C] 1978. 소수 찾기 (2) | 2022.10.04 |
[백준][C] 2869. 달팽이는 올라가고 싶다. (1) | 2022.10.03 |
[백준][C] 1712. 손익분기점 (0) | 2022.10.03 |
[백준][C] 2941. 크로아티아 알파벳 (2) | 2022.10.03 |