알고리즘 문제/C++

[백준] 2839번 : 설탕배달 - C++

lingk 2020. 6. 22. 16:35

 

#include <iostream>
using namespace std;

int main(void) {
	int num;
	cin >> num;
	int ret = 0;
	switch (num % 5) {
	case 4:
		if (num / 5 < 1) {ret = -1; break;}
		else { ret = (num / 5) + 2; break; }
	case 3:
		ret = (num / 5) + 1; break;
	case 2:
		if (num / 5 < 2) { ret = -1; break; }
		else { ret = num / 5 + 2; break; }
	case 1:
		if (num / 5 < 1) { ret = -1; break; }
		else { ret = num / 5 + 1; break; }
	case 0:
		ret = num / 5; break;
	}

	cout << ret;
}

입력받은 num(kg)에 대하여 나머지를 기준으로 case를 나누었다.

 

1) 나머지가 4인 경우

몫이 1보다 작은 경우는 4kg이므로 5kg과 3kg으로 구성할 수 없으므로 -1을 출력한다.

그 외의 경우는 num/5의 몫에서 1을 빼고 나머지와 더해주면 9kg(5+4)이 남는다. 9/3=3이므로 3봉지가 추가된다.

따라서 봉지의 개수는 (num/5-1)+3=num/5+2가 된다.

 

2) 나머지가 3인 경우

봉지의 개수는 num/5+1이 된다.

 

3) 나머지가 2인 경우

몫이 1보다 작은 경우는 5kg 과 3kg으로 구성할 수 없으므로 -1을 출력한다.

그 외의 경우는 num/5의 몫에서 2를 빼고 나머지와 더해주면 12kg(10+2)이 남는다. 12/3=4이므로 4봉지가 추가된다.

따라서 봉지의 개수는 (num/5-2)+4=num/5+2가 된다.

 

4) 나머지가 1인 경우

몫이 1보다 작은 경우는 1kg이므로 5kg과 3kg으로 구성할 수 없으므로 -1을 출력한다.

그 외의 경우는 num/5의 몫에서 1을 빼고 나머지와 더해주면 6kg(5+1)이 남는다. 6/2=3이므로 3봉지가 추가된다.

따라서 봉지의 개수는 (num/5-1)+3=num/5+2가 된다.

반응형