반응형
<문제 소개>
<소스 코드>
#include <iostream>
#include <string>
#include <vector>
#include <sstream>
#include <map>
#include <cmath>
#include <stack>
#include <queue>
#include <algorithm>
#include <cstdlib>
using namespace std;
int main()
{
int N; // 설탕의 갯수
cin >> N;
int count = 0; // 봉지의 갯수
for (int i = N / 5; i >= 0; i--)
{
int res = N - (i * 5); // 남은 설탕의 갯수
if (res % 3 == 0)
{
// 남은 설탕이 없는 경우
count = i + res / 3;
cout << count;
break;
}
}
if (count == 0) cout << -1;
return 0;
}
<이전 풀이 소스코드>
#include <iostream>
#include <string>
#include <cassert>
using namespace std;
int main()
{
int N;
cin >> N;
assert(N >= 3 && N <= 5000);
int sum = 0; // 봉지의 갯수
int k = 0; // 남은 킬로그램
if (N % 5 == 0)
{
// 5로 나누어 떨어지는 경우
sum = N / 5;
cout << sum;
return 0;
}
else
{
// 3,5 섞어서 해야하는 경우 + 3으로 나누어 떨어지는 경우
for (int i = N / 5; i >= 0; i--)
{
int p = N - (5 * i);
if (p % 3 == 0)
{
cout << i + (p / 3);
return 0;
}
}
// 나누어 떨어지지 않는 경우
cout << -1;
}
return 0;
}
<풀이과정>
1. 5킬로그램 봉지의 갯수 i를 N/5부터 0까지 감소시키면서 남은 설탕의 갯수인 N-(i*5)를 구해서 res에 담는다.
2. res가 3으로 나누어 떨어지면 5킬로그램으로 나눈 봉지의 갯수인 i와 res를 3으로 나누어서 구한 3킬로그램 봉지로 담은 갯수를 더한 i+res/3을 출력해주고 빠져나간다.
3. 만약 끝까지 설탕을 담지못해서 봉지의 갯수가 0이라면 -1을 출력한다.
<코멘트>
예전에 풀었던 건데 아래처럼 써있길래 브루트포스로 다시 풀어보았다!
근데 이전 코드를 보니 이번과 거의 똑같이 푼듯ㅋㅋㅎㅋㅋ