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

논리 연산자 and를 사용하지 않고 3과 5의 공배수를 검사하려면 어떻게 해야 할 까요? 3 * 5 = 15는 3과 5의 최소공배수이므로 15로 나눴을 때 나머지가 0인 값들은 3과 5의 공배수입니다.

fizzbuzz_without_logical_operator.py

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)             # 아무것도 해당되지 않을 때 숫자 출력

실행 결과

1
2
Fizz
... (생략)
FizzBuzz
91
92
Fizz
94
Buzz
Fizz
97
98
Fizz
Buzz

i를 15로 나눴을 때 나머지를 구하여 3과 5의 공배수를 구했습니다. 이때는 15라는 숫자 안에 3과 5의 최소공배수라는 뜻이 숨어 있습니다. 따라서 주석에 적절한 설명이 없다면 코드를 읽는 사람이 15의 속 뜻을 알아내야 합니다.

FizzBuzz는 문제가 간단해서 15가 3과 5의 최소공배수라는 것을 쉽게 알 수 있습니다. 하지만 실무에서는 i % 3 == 0 and i % 5 == 0처럼 의미를 명확하게 드러내는 것이 좋습니다.

요즘은 프로그래밍 언어의 성능도 좋아졌고, CPU도 매우 빨라졌으므로 사소한 부분에 신경쓰기 보다는 가독성을 높이는 쪽으로 코드를 작성합니다.

참고 | 가독성

읽기 쉽고 이해하기 쉬운 코드를 가독성이 좋다고 말합니다. 코드를 복잡하게 작성할 수록 프로그래밍 실력이 뛰어나다고 착각하기 쉽지만 정반대입니다. 즉, 복잡한 로직을 간단하고 쉽게 작성할 수록 프로그래밍 실력이 뛰어나다고 할 수 있습니다.

프로그래밍은 만드는 것으로 끝나지 않고, 항상 유지보수가 뒤따릅니다. 특히 규모가 큰 프로젝트는 여러 사람이 협업하여 기능을 만들고 내가 작성한 코드를 다른 사람이 수정하거나, 내가 다른 사람의 코드를 수정하기도 합니다(실무에서는 내가 다른 사람의 코드를 수정해야 하는 일이 대부분입니다). 따라서 다른 사람이 내 코드를 유지보수하기 쉽도록 코드를 작성해야 하고, 내가 만든 코드를 나중에 내가 봤을 때도 이해하기 쉽도록 작성해야 합니다.