백준 28702 - FizzBuzz

황재진·2024년 7월 9일

백준

목록 보기
36/54

3의 배수와 5의 배수면 FizzBuzz, 3의 배수인데 5의 배수가 아니면 Fizz, 3의 배수가 아닌데 5의 배수면 Buzz, 이외에는 숫자를 출력하는 문제입니다.

잘 생각하면 간단하게 해결할 수 있는 문제입니다.

문제에서 "입력이 항상 FizzBuzz 문제에서 연속으로 출력된 세 개의 문자열에 대응됨이 보장됩니다." 라고 적혀있습니다. 즉, 숫자로 치환했을 때 연속되는 세 숫자가 주어진다는 뜻입니다.

이 때 입력에 모두 문자열로 주어지는 경우는 존재하지 않습니다. 3의 배수는 2칸 간격으로 주어지고, 5의 배수는 5칸 간격, 15의 배수는 15칸 간격으로 주어집니다. 이들이 연속적으로 주어지기에는 15는 3과 5의 배수이기에 중첩되어 15의 배수 주변에 3의 배수와 5의 배수가 존재할 수 없습니다. 3의 배수는 2칸, 5의 배수는 5칸 떨어져있게 됩니다.

그러므로 입력에서 숫자를 찾아 해당 숫자가 몇번째인지 파악한 후 4번째 숫자를 구하면 됩니다.

#include <iostream>

int main()
{
	std::string strs[3];

	int num = 0;
	int pos = 0;
	for (int i = 0; i < 3; i++)
	{
		std::cin >> strs[i];
		if (strs[i][0] >= '0' && strs[i][0] <= '9')
		{
			num = atoi(strs[i].c_str());
			pos = i;
		}
	}
	
	int result = num + 3 - pos;

	if (result % 15 == 0) std::cout << "FizzBuzz";
	else if (result % 3 == 0) std::cout << "Fizz";
	else if (result % 5 == 0) std::cout << "Buzz";
	else std::cout << result;

	return 0;
}
profile
프로그래밍, 쉐이더 등 이것저것 다해보는 게임 개발자입니다

0개의 댓글