알고리즘 문제/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가 된다.
반응형