코딩/백준

[백준][C] 2839. 설탕 배달

rivermoon 2022. 10. 4. 09:44

예제 입력

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보다 크거나 같습니다.