본문 바로가기
Python 코딩도장

파이썬 코딩도장 Unit 20 정리 : FizzBuzz

by chanfficial 2022. 1. 16.

Unit 20

FizzBuzz 문제

  • FizzBuzz는 매우 간단한 프로그래밍 문제이며 규칙은 다음과 같다.
    1. 1에서 100까지 출력한다.
    2. 3의 배수는 Fizz를 출력한다.
    3. 5의 배수는 Buzz를 출력한다.
    4. 3과 5의 공배수는 FizzBuzz를 출력한다.

 

1. 1부터 100까지 숫자 출력하기

  • FizzBuzz 문제는 반복문, 조건문, 나머지 연산자, 비교 연산자를 모두 사용해야 풀 수 있다.
    for i in range(1, 101): # 1부터 100까지 100번 반복
        print(i)​
     - 1부터 100까지 100번 반복하면서 print로 값을 출력하도록 for과 range를 사용한다.

 

2. 3의 배수일 때와 5의 배수일 때 처리하기

  • 3과 5의 배수일 때 숫자 대신 'Fizz', 'Buzz'를 출력하기
    for i in range(1, 101):  # 1부터 100까지 100번 반복
        if i % 3 == 0:       # 3의 배수일 때
            print('Fizz')    # Fizz 출력
        elif i % 5 == 0:     # 5의 배수일 때
            print('Buzz')    # Buzz 출력
        else:
            print(i)         # 아무것도 해당되지 않을 때 숫자 출력
            
    # 실행결과
    1
    2
    Fizz
    4
    Buzz​
    - i를 3으로 나눴을 때 나머지가 0이면 3의 배수이고, 5로 나눴을 때 나머지가 0이면 5의 배수이기 때문에 if 조건문을 사용하여 3의 배수일 때 'Fizz', elif로 5의 배수일 때 'Buzz'를 출력하도록 했다.

 

3. 3과 5의 공배수 처리하기

  • 공배수는 논리 연산자 and를 사용한다.
    for i in range(1, 101):            # 1부터 100까지 100번 반복
        if i % 3 == 0 and i % 5 == 0:  # 3과 5의 공배수일 때
            print('FizzBuzz')          # FizzBuzz 출력
        elif i % 3 == 0:               # 3의 배수일 때
            print('Fizz')              # Fizz 출력
        elif i % 5 == 0:               # 5의 배수일 때
            print('Buzz')              # Buzz 출력
        else:
            print(i)                   # 아무것도 해당되지 않을 때 숫자 출력
            
    # 실행결과
    ...(생략)
    11
    Fizz
    13
    14
    FizzBuzz
    ...
    - and 연산자를 사용하여 i를 3으로 나눴을 때 나머지가 0이면서 5로 나눴을 때도 나머지가 0이면 'FizzBuzz'를 출력하도록 했다. 하지만 i가 30일 때 if에서 3의 배수를 먼저 검사하면 3과 5의 공배수는 검사하지 않고 그냥 넘어가버리기 때문에 3과 5의 공배수를 먼저 검사한 뒤 elif로 3의 배수, 5의 배수를 각각 검사해야 한다.

 

4. 논리 연산자를 사용하지 않고 3과 5의 공배수 처리하기

  • 15는 3과 5의 최소공배수임을 이용하여 15로 나눴을 때 나머지가 0인 값들을 3과 5의 공배수라고 하면 된다.
    for i in range(1, 101):    # 1부터 100까지 100번 반복
        if i % 15 == 0:        # 15의 배수(3과 5의 공배수)일 때
            print('FizzBuzz')  # FizzBuzz 출력
        elif i % 3 == 0:       # 3의 배수일 때
            print('Fizz')      # Fizz 출력
        elif i % 5 == 0:       # 5의 배수일 때
            print('Buzz')      # Buzz 출력
        else:
            print(i)           # 아무것도 해당되지 않을 때 숫자 출력
            
    # 실행결과
    ...(생략)
    14
    FizzBuzz
    16
    17
    Fizz
    ...​
    - 이렇게 최소 공배수를 이용하여 코드를 작성하는 것도 좋지만 'i % 3 == 0 and i % 5 == 0' 처럼 의미를 명확하게 드러내는 것을 더 추천한다.

 

정리참조

https://dojang.io/course/view.php?id=7 

 

강좌: 파이썬 코딩 도장

모두 펼치기모두 접기

dojang.io