Programing/백준, 프로그래머스(C++)

[C++][백준 28702] FizzBuzz

hye3193 2025. 1. 5. 14:48

https://www.acmicpc.net/problem/28702

제출 코드

#include <iostream>
#include <string>
using namespace std;

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    string str[3];
    int res;
    cin >> str[0] >> str[1] >> str[2];
    for (int i = 0; i < 3; i++)
    {
        if (str[i] != "FizzBuzz" && str[i] != "Fizz" && str[i] != "Buzz")
        {
            res = stoi(str[i]) + 3 - i;
        }
    }

    if (res % 5 == 0)
    {
        if (res % 3 == 0)
            cout << "FizzBuzz";
        else
            cout << "Buzz";
    }
    else if (res % 3 == 0)
        cout << "Fizz";
    else
        cout << res;
}

문자열이 3개 출력되는데, 그 중 하나라도 숫자라면 다음에 오는 문자열을 쉽게 알 수 있다

그런데 fizzbuzz, fizz, buzz는 각각 15의 배수, 3의 배수, 5의 배수이기 때문에 3개 중 숫자가 하나라도 없는 경우가 나올 수 없어서 위와 같이 코드를 작성하였다

 

3개 문자열 중에서 숫자인 것을 찾고, 그 숫자에 몇 번째 문자열인지를 고려해서 다음에 올 정수를 구해준다

그리고 mod 연산을 통해 3의 배수 5의 배수 15의 배수 여부를 찾아서 그에 맞게 출력한다