Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬으로 FizzBuzz 구현하기: 3과 5의 배수를 Fizz, Buzz로 바꾸는 방법

FizzBuzz 문제란?

숫자 n이 주어졌을 때, 1부터 n까지의 모든 숫자를 문자열 형태로 표현하는 것이 목표입니다. 단, 아래 세 가지 규칙을 반드시 따라야 합니다.

  • 숫자가 3으로 나누어떨어지면 해당 숫자 대신 "Fizz"를 넣습니다.
  • 숫자가 5로 나누어떨어지면 해당 숫자 대신 "Buzz"를 넣습니다.
  • 숫자가 3과 5 모두로 나누어떨어지면 해당 숫자 대신 "FizzBuzz"를 넣습니다.

FizzBuzz는 코딩 인터뷰에서 자주 등장하는 대표적인 입문 문제로, 조건문과 반복문의 기본 개념을 점검하기에 좋은 예제입니다.

문제 해결 접근 방법

이 문제는 조건문(if-elif-else)과 반복문(for)을 조합하면 간단하게 해결할 수 있습니다. 알고리즘의 흐름은 다음과 같습니다.

  • 1부터 n까지 모든 숫자에 대해 아래 조건을 순서대로 검사합니다.
    • 3과 5로 모두 나누어떨어지면 "FizzBuzz"를 추가합니다.
    • 그렇지 않고 3으로만 나누어떨어지면 "Fizz"를 추가합니다.
    • 그렇지 않고 5로만 나누어떨어지면 "Buzz"를 추가합니다.
    • 어떤 조건에도 해당하지 않으면 숫자 자체를 문자열로 변환해 추가합니다.

주의할 점: 15처럼 3과 5의 공배수는 Fizz 또는 Buzz 조건에도 걸릴 수 있으므로, 반드시 FizzBuzz(공배수) 조건을 가장 먼저 검사해야 올바른 결과를 얻을 수 있습니다.

구현 예제

class Solution(object):
    def fizzBuzz(self, n):
        result = []
        for i in range(1, n+1):
            if i % 3 == 0 and i % 5 == 0:
                result.append("FizzBuzz")
            elif i % 3 == 0:
                result.append("Fizz")
            elif i % 5 == 0:
                result.append("Buzz")
            else:
                result.append(str(i))
        return result

ob1 = Solution()
print(ob1.fizzBuzz(15))

입력

15

출력

['1', '2', 'Fizz', '4', 'Buzz', 'Fizz', '7', '8', 'Fizz', 'Buzz', '11', 'Fizz', '13', '14', 'FizzBuzz']

복잡도 분석

  • 시간 복잡도: O(n) — 1부터 n까지 각 숫자를 한 번씩 순회합니다.
  • 공간 복잡도: O(n) — 결과를 저장하기 위한 리스트가 필요합니다.

이처럼 FizzBuzz는 나머지 연산자(%)와 조건문의 실행 순서만 정확히 이해하면 누구나 쉽게 구현할 수 있는 문제입니다. 위 코드를 직접 실행해 다양한 n 값으로 테스트해 보면서 개념을 확실히 익혀 보세요.