N이라는 자연수를 3과 5를 최소한으로 이용해서 나누어 떨어지게 하는 문제입니다.
아래와 같은 경우가 있습니다.
a%3 == 0 && a>=15
a%3 == 1 && a>=10
a%3 == 2 && a>=5
a%3 == 0
else
a%3 == 0 && a>=15은 3으로 나누어 떨어지지만 15이상의 숫자이기 때문에 5로 나누면서 3으로 나누어떨어지게
5*3 = 15이므로 15로 나누어 줍니다.
a%3 == 1 && a>=10은 3으로 나누었을때 1이 남습니다. 그래서 10이상의 숫자라면 10으로 나누어주면 3으로 나누어떨어지게 됩니다.
a%3 == 2 && a>=5은 3으로 나누었을때 2가 남습니다. 그래서 5이상의 숫자라면 5로 나누어주면 3으로 나누어떨어지게 됩니다.
a%3 == 0는 위와 같은 연산을 반복한 후 최종적으로 3으로 나누는 작업을 합니다.
else는 나누어떨어지지 않을때 반복문을 멈추는 역할을 합니다.
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int a;
int count = 0;
cin >> a;
while (a > 0) {
if (a % 3 == 0 && a >= 15) {
a -= 15;
count += 3;
}
else if (a % 3 == 1 && a >= 10) {
a -= 10;
count += 2;
}
else if (a % 3 == 2 && a >= 5) {
a -= 5;
count += 1;
}
else if (a % 3 == 0) {
count += (a / 3);
a = 0;
}
else {
break;
}
}
if (a == 0) {
cout << count << endl;
}
else {
cout << "-1" << endl;
}
return 0;
}
'알고리즘' 카테고리의 다른 글
[C++] 백준 1001번 A-B (0) | 2019.03.04 |
---|---|
[C++] 백준 1000번 A+B (0) | 2019.03.04 |
[C++] 백준 2557번 Hello World (0) | 2019.03.04 |
[C++] 백준 9095번 1,2,3 더하기 (0) | 2019.02.03 |
[C++] 백준 11047번 동전 0 (0) | 2019.01.29 |