
3과 5의 배수의 특성을 생각해 보면 문제를 해결할 실마리가 보인다.
위 2가지 사실은 당연한 내용일 것이다.
그렇다면 3과 5의 배수가 연달아 3번 나올 가능성을 생각해 보는 것이다.
#include <iostream>
using namespace std;
int main()
{
ios::sync_with_stdio(0), cin.tie(0);
for (int i = 0; i < 3; ++i)
{
string str;
cin >> str;
if (str[0] == 'F' || str[0] == 'B')
{
continue;
}
int num = stoi(str) + 3 - i;
if (num % 3 && num % 5)
{
cout << num;
}
else
{
if (num % 3 == 0)
{
cout << "Fizz";
}
if (num % 5 == 0)
{
cout << "Buzz";
}
}
break;
}
return 0;
}
3과 5의 배수가 연달아 3칸을 차지하는 그런 일은 없다. 왜냐하면 두 수 중 가장 낮은 3의 배수를 생각해 보아도 3의 간격으로 올라가기에 2칸이 빈다. 3과 5의 배수가 2칸을 차지하더라도 나머지 한 칸은 3과 5의 배수가 아닌 수가 차지하는 것이다.
그렇기에 3개의 연달아 들어온 문자열 중에서 숫자인 것을 찾아낸 뒤 출력값을 계산하면 된다.