안녕하세요.
오늘은 백준 28702번 'FizzBuzz' 문제풀이를 해보도록 하겠습니다.
해당 문제는 i = 1, 2, 3... 과 같이 오름차순 문자열 3개를 입력받고, 각 숫자들이 FizzBuzz, Fizz, Buzz 혹은 숫자인 것을 확인하여 4번째로 올 숫자가 FizzBuzz라면 FizzBuzz를 출력하고 숫자라면 숫자를 그대로 출력하는 문제입니다.
FizzBuzz는 숫자가 3과 5의 배수일 경우, Fizz는 3의 배수일경우, Buzz는 5의 배수일 경우입니다.
저는 해당 문제를 고민하면서 FizzBuzz, Fizz, Buzz는 3개가 같이 붙어있을 수 없다는 사실을 발견했습니다.
따라서 입력된 문자들중 FizzBuzz, Fizz, Buzz가 아닌 문자를 찾아내어 해당 문자를 정수형으로 변환하고 해당 숫자가 입력된 문자들 리스트에서 몇 번째에 위치해 있는지 인덱스를 구한 후 그 인덱스를 기준으로 4번째에 올 숫자를 출력하도록 했습니다.
그럼 바로 문제풀이를 진행하겠습니다.
입력예시
Fizz
Buzz
11
출력예시
Fizz
우선, 3개의 입력을 받고 리스트에 문자들을 담아주겠습니다.
그리고 다음 숫자를 구하는 메서드 반환값을 출력시켜주고, 매개변수로 list를 넣어줍니다.
List<string> list = new List<string>();
for (int i = 0; i < 3; i++)
{
string input = Console.ReadLine();
list.Add(input);
}
Console.WriteLine(GetNextNum(list));
이제 GetNextNum 메서드 부분입니다.
아까 문제풀이 아이디어를 설명할때와 동일한 코드입니다.
LINQ를 이용해 found에 FizzBuzz가 아닌 숫자를 담아줍니다.
found를 이용하여 nextNumber에서 4번째 올 숫자가 무엇인지 유추입니다.
그 후에 다음 올 숫자가 FizzBuzz인지 확인하고 정답을 반환합니다.
string GetNextNum(List<string> list)
{
string found = list.FirstOrDefault(x => int.TryParse(x, out _));
if (found == null)
return "세 입력 중 숫자가 포함되지 않았습니다.";
int number = int.Parse(found);
int index = list.IndexOf(found);
int nextNumber = number + (3 - index);
return ConvertToFizzBuzz(nextNumber);
}
마지막으로 전에 다음으로 올 숫자가 FizzBuzz인지 확인하는 메서드입니다.
말 그대로 FizzBuzz라면 FizzBuzz를 리턴하고 아니라면 수를 리턴합니다.
string ConvertToFizzBuzz(int number)
{
if (number % 3 == 0 && number % 5 == 0)
return("FizzBuzz");
else if (number % 3 == 0)
return("Fizz");
else if (number % 5 == 0)
return("Buzz");
else
return(number.ToString());
}
이번 풀이는 여기까지입니다.
다음은 전체코드입니다.
감사합니다.
internal class Program
{
static void Main(string[] args)
{
List<string> list = new List<string>();
for (int i = 0; i < 3; i++)
{
string input = Console.ReadLine();
list.Add(input);
}
Console.WriteLine(GetNextNum(list));
string GetNextNum(List<string> list)
{
string found = list.FirstOrDefault(x => int.TryParse(x, out _));
if (found == null)
return "세 입력 중 숫자가 포함되지 않았습니다.";
int number = int.Parse(found);
int index = list.IndexOf(found);
int nextNumber = number + (3 - index);
return ConvertToFizzBuzz(nextNumber);
}
string ConvertToFizzBuzz(int number)
{
if (number % 3 == 0 && number % 5 == 0)
return("FizzBuzz");
else if (number % 3 == 0)
return("Fizz");
else if (number % 5 == 0)
return("Buzz");
else
return(number.ToString());
}
}
}'알고리즘 풀이' 카테고리의 다른 글
| [C#] 백준 30802번 문제풀이 (0) | 2025.12.29 |
|---|---|
| [C#] 백준 2775번 문제풀이 (0) | 2025.12.26 |
| [C#] 백준 2108번 문제풀이 (0) | 2025.10.18 |
| [C#] 백준 1874번 풀이 (0) | 2025.10.16 |
| [C#] 백준 1966번 문제풀이 (0) | 2025.10.12 |