티스토리 뷰

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;
}
728x90

'알고리즘' 카테고리의 다른 글

[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
댓글
댓글쓰기 폼
공지사항