[C++][백준 28702] FizzBuzz

PublicMinsu·2024년 8월 2일

문제

접근 방법

3과 5의 배수의 특성을 생각해 보면 문제를 해결할 실마리가 보인다.

  • 3의 배수는 값이 3의 간격으로 올라간다.
  • 5의 배수는 값이 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개의 연달아 들어온 문자열 중에서 숫자인 것을 찾아낸 뒤 출력값을 계산하면 된다.

profile
연락 : publicminsu@naver.com

0개의 댓글