문제 정보
백준 ( BOJ ) 2839 설탕 배달
문제 풀이 : 시뮬레이션
문제 출처 : https://www.acmicpc.net/problem/2839
시작 Thinking
가장 적은 수로 만드는 방법 ?
=> 5를 먼져 채운다.
즉 5로 채워넣고, 나머지 3으로 채워주면 되는 문제입니다.
그렇다면 어떻게 해 나가야 할까요?
14를 예로 들어서 설명 해 보겠습니다.
3kg 5kg 남은양
0 2 4
1 2 1
1 1 6
2 1 3
3 1 0
이런식으로 하시면 됩니다.
3kg로 채울 수 없을 때, 5kg을 빼버리고, 남은양에 5kg 을 더해주면 됩니다.
즉, 남은양이 3kg 미만일때 5kg을 빼버리면 됩니다.
3kg은 매번 빼주면서, 남은 양이 0 이하가 될때까지 반복 해 주시면 됩니다.
0이라면 딱 맞게 떨어진 것이고,
0 미만 음수라면 안맞아 떨어지는 것이 되겠죠.
코드
#include <iostream>
using namespace std;
int main() {
int n;
int vinil3 = 0;
int vinil5 = 0;
int remain = 0;
cin >> n;
vinil5 = n / 5;
remain = n % 5;
while (remain > 0) {
if (remain < 3 && vinil5>0) {
vinil5--;
remain += 5;
}
vinil3++;
remain -= 3;
}
if (remain != 0)
cout << -1;
else
cout << vinil3 + vinil5;
}