문제
FizzBuzz 문제는 𝑖=1,2,⋯ 에 대해 다음 규칙에 따라 문자열을 한 줄에 하나씩 출력하는 문제입니다.
- 𝑖가 3의 배수이면서 5의 배수이면 “FizzBuzz”를 출력합니다.
- 𝑖가 3의 배수이지만 5의 배수가 아니면 “Fizz”를 출력합니다.
- 𝑖가 3의 배수가 아니지만 5의 배수이면 “Buzz”를 출력합니다.
- 𝑖가 3의 배수도 아니고 5의 배수도 아닌 경우 𝑖를 그대로 출력합니다.
FizzBuzz 문제에서 연속으로 출력된 세 개의 문자열이 주어집니다. 이때, 이 세 문자열 다음에 올 문자열은 무엇일까요?
입력
FizzBuzz 문제에서 연속으로 출력된 세 개의 문자열이 한 줄에 하나씩 주어집니다. 각 문자열의 길이는 8 이하입니다. 입력이 항상 FizzBuzz 문제에서 연속으로 출력된 세 개의 문자열에 대응됨이 보장됩니다.
출력
연속으로 출력된 세 개의 문자열 다음에 올 문자열을 출력하세요. 여러 문자열이 올 수 있는 경우, 아무거나 하나 출력하세요.
문제 풀이
수학 문제.
i가 3의 배수이면 Fizz이거나 FizzBuzz이다. 연속된 3개의 문자열이 주어지므로 3개 중 하나는 3의 배수이게 되므로 Fizz 혹은 FizzBuzz가 된다. 그러면 나머지 2개는 3의 배수가 아니게 되는데,두 개 다 5의 배수가 될 수 없으므로 하나는 i가 출력된다.
다시 말해 항상 3개의 문자열 중 하나는 적어도 3의 배수도 5의 배수도 아니어서 i가 그대로 출력된다.
세 문자열을 확인해 i인 문자열에 적절히 +3, +2, +1 하여 세 문자열의 다음 숫자를 얻어온 후, 이를 규칙에 맞게 FizzBuzz, Fizz, Buzz, i 중 하나를 출력해주면 된다.
세 문자열 중 하나는 항상 제대로 i가 출력되므로 어떤 한 입력에 대해 답은 유일하다.
아래는 코드.
더보기
#include <iostream>
#include <string>
using namespace std;
void print(int N)
{
if (N % 3 == 0 && N % 5 == 0)
{
cout << "FizzBuzz" << "\n";
}
else if (N % 3 == 0)
{
cout << "Fizz" << "\n";
}
else if (N % 5 == 0)
{
cout << "Buzz" << "\n";
}
else
{
cout << N << "\n";
}
}
int main()
{
cin.tie(NULL);
ios::sync_with_stdio(false);
string str1, str2, str3;
cin >> str1;
cin >> str2;
cin >> str3;
if (str3 != "FizzBuzz" && str3 != "Fizz" && str3 != "Buzz")
{
print(stoi(str3) + 1);
}
else if (str2 != "FizzBuzz" && str2 != "Fizz" && str2 != "Buzz")
{
print(stoi(str2) + 2);
}
else
{
print(stoi(str1) + 3);
}
return 0;
}
'알고리즘 > 백준' 카테고리의 다른 글
[백준 17393] 다이나믹 롤러 (C++) (0) | 2024.09.12 |
---|---|
[백준 1183] 약속 (C++) (0) | 2024.09.11 |
[백준 19638] 센티와 마법의 뿅망치 (C++) (0) | 2024.09.09 |
[백준 17103] 골드바흐 파티션 (C++) (0) | 2024.09.08 |
[백준 1120] 문자열 (C++) (0) | 2024.09.07 |