FizzBuzz는 프로그래밍 학습자라면 한 번쯤 마주치게 되는 대표적인 알고리즘 문제입니다. 간단해 보이지만 조건문의 처리 순서와 논리 구조를 이해하고 있는지 확인할 수 있어 코딩 면접에서도 자주 등장합니다.
FizzBuzz 문제의 규칙
FizzBuzz 문제는 1부터 100까지의 숫자를 출력하되, 다음 규칙에 따라 특정 숫자를 문자열로 대체하는 것입니다.
- 3의 배수인 경우 → 숫자 대신 "Fizz" 출력
- 5의 배수인 경우 → 숫자 대신 "Buzz" 출력
- 3과 5의 공배수(즉, 15의 배수)인 경우 → 숫자 대신 "FizzBuzz" 출력
- 그 외의 경우 → 해당 숫자 그대로 출력
예를 들어 출력 결과는 다음과 같은 흐름으로 진행됩니다.
1, 2, Fizz, 4, Buzz, Fizz, 7, 8, Fizz, Buzz, 11, Fizz, 13, 14, FizzBuzz, ...
C# 구현 코드
아래는 위 규칙을 C#으로 구현한 전체 코드입니다.
using System;
class Demo {
static void Main(String[] args) {
for(int i = 1; i <= 100; i++) {
if((i % 3 == 0) && (i % 5 == 0))
Console.WriteLine("FizzBuzz\n");
else if(i % 3 == 0)
Console.WriteLine("Fizz\n");
else if(i % 5 == 0)
Console.WriteLine("Buzz\n");
else
Console.WriteLine(i);
}
}
}
코드 핵심 포인트
1. 조건 검사 순서가 중요합니다
이 코드에서 가장 주의해야 할 부분은 공배수 조건(3과 5의 배수)을 가장 먼저 검사한다는 점입니다. 만약 i % 3 == 0 조건을 먼저 검사하면, 15처럼 3과 5의 공배수에 해당하는 숫자가 "FizzBuzz"가 아닌 "Fizz"로 잘못 출력되기 때문입니다.
2. 나머지 연산자(%) 활용
어떤 수가 다른 수의 배수인지 판별할 때는 나머지 연산자 %를 사용합니다. i % 3 == 0이라는 조건은 i를 3으로 나눈 나머지가 0이라는 의미로, 곧 i가 3의 배수임을 뜻합니다.
3. if-else if 구조로 중복 출력 방지
if-else if-else 구조를 사용하면 하나의 숫자에 대해 단 하나의 분기만 실행되므로, 여러 개의 독립된 if문을 사용할 때 발생할 수 있는 중복 출력 문제를 자연스럽게 피할 수 있습니다.
마무리
FizzBuzz는 단순한 반복문과 조건문만으로 해결할 수 있는 문제지만, 조건의 우선순위를 올바르게 설계하는 사고력을 기르는 데 탁월한 연습 문제입니다. 위 코드를 직접 실행해 보면서 출력 결과를 확인하고, 1~100 범위를 변경하거나 새로운 규칙(예: 7의 배수에는 "Bazz" 추가)을 적용해 보며 응용력을 키워보세요.