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

파이썬으로 FizzBuzz 문제 해결하기

프로그래밍 면접에서 가장 자주 등장하는 고전 문제 중 하나인 FizzBuzz를 파이썬으로 해결하는 방법을 알아보겠습니다.

문제 정의

숫자 n이 주어졌을 때, 1부터 n까지의 모든 숫자를 문자열 형태로 출력해야 합니다. 단, 다음과 같은 규칙이 적용됩니다.

  • 숫자가 3으로 나누어 떨어지면 숫자 대신 "Fizz"를 출력합니다.
  • 숫자가 5로 나누어 떨어지면 숫자 대신 "Buzz"를 출력합니다.
  • 숫자가 3과 5 모두로 나누어 떨어지면 숫자 대신 "FizzBuzz"를 출력합니다.

해결 접근 방법

이 문제는 조건문의 순서가 핵심입니다. 다음 단계를 따라 해결할 수 있습니다.

  • 1부터 n까지의 모든 숫자에 대해 다음을 검사합니다.
    • 3과 5로 모두 나누어 떨어지면 "FizzBuzz"를 출력
    • 그렇지 않고 3으로만 나누어 떨어지면 "Fizz"를 출력
    • 그렇지 않고 5로만 나누어 떨어지면 "Buzz"를 출력
    • 어떤 조건에도 해당하지 않으면 숫자를 그대로 문자열로 출력

주의할 점: 3과 5로 모두 나누어 떨어지는 경우(즉, 15의 배수)를 가장 먼저 검사해야 합니다. 그렇지 않으면 15의 배수가 "Fizz" 또는 "Buzz"로 잘못 출력될 수 있습니다.

구현 예제

다음 코드를 통해 더 잘 이해해 보겠습니다.

class Solution(object):
    def fizzBuzz(self, n):
        """
        :type n: int
        :rtype: List[str]
        """
        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(30))

입력

30

출력

["1","2","Fizz","4","Buzz","Fizz","7","8","Fizz","Buzz","11","Fizz",
"13","14","FizzBuzz","16","17","Fizz","19","Buzz","Fizz","22","23",
"Fizz","Buzz","26","Fizz","28","29","FizzBuzz"]

코드 설명

위 코드의 동작 방식을 단계별로 살펴보겠습니다.

  • result 리스트 초기화: 결과를 저장할 빈 리스트를 생성합니다.
  • 반복문: range(1, n+1)을 사용해 1부터 n까지 순회합니다. n+1인 이유는 파이썬의 range 함수가 끝값을 포함하지 않기 때문입니다.
  • 조건 검사: 나머지 연산자 %를 사용해 3과 5로 나누어 떨어지는지 확인하고, 조건에 맞는 문자열을 리스트에 추가합니다.
  • 문자열 변환: 일반 숫자는 str(i)를 통해 문자열로 변환하여 저장합니다.

시간 복잡도

이 알고리즘의 시간 복잡도는 O(n)입니다. 1부터 n까지 각 숫자를 한 번씩만 검사하면 되기 때문입니다. 공간 복잡도 역시 결과 리스트의 크기가 n에 비례하므로 O(n)입니다.

마무리

FizzBuzz는 단순해 보이지만 조건문의 순서, 나머지 연산, 문자열 변환 등 기본기를 점검할 수 있는 좋은 문제입니다. 면접 준비나 파이썬 문법 연습을 위해 직접 코드를 작성해 보시기 바랍니다.