Featured image of post 프로그래밍의 등용문 'FizzBuzz 문제'란? Python 작성법 해설

프로그래밍의 등용문 'FizzBuzz 문제'란? Python 작성법 해설

프로그래머 면접에서도 자주 출제되는 'FizzBuzz 문제'에 대해, 그 개요와 Python을 사용한 구체적인 코드 예시(조건 분기)를 알기 쉽게 해설합니다. 초보자부터 기본을 되짚어보고 싶은 분들까지 필독할 만한 내용입니다.

FizzBuzz란 결국 무엇인가?

안녕하세요!

오늘은 “FizzBuzz"에 대해 써보려고 합니다.

“아, 그거 알아!” 하시는 분들도, “뭔가 들어본 적은 있는데 잘 모르겠다” 하시는 분들도 조금만 어울려 주세요. 몇 분이면 읽을 수 있고, 어쩌면 “그렇구나” 하고 고개를 끄덕이게 되실지도 모릅니다.


“FizzBuzz를 작성하지 못하면 프로그래머 실격"이라는 말은 사실일까?

FizzBuzz를 대략적으로 설명하자면 이런 식입니다.

1
2
3
4
5
6
7
8
9
for i in range(1, 101):
    if i % 15 == 0:
        print("FizzBuzz")
    elif i % 3 == 0:
        print("Fizz")
    elif i % 5 == 0:
        print("Buzz")
    else:
        print(i)

네, 이것이 바로 유명한 “FizzBuzz 문제"입니다.

1부터 100까지의 숫자를 순서대로 확인하면서,
3의 배수라면 “Fizz”, 5의 배수라면 “Buzz”,
두 수의 공배수라면 “FizzBuzz"를 출력하는 아주 간단한 문제입니다.

그런데 왜인지 “프로그래머로서의 최소한의 시험” 같은 취급을 받는 경우가 많습니다. 면접에서도 출제되고, SNS에서는 “FizzBuzz도 못 짜는 녀석이…” 같은 우월감 섞인 발언도 심심치 않게 보입니다.

하지만, 잠깐만 기다려 보세요.

정말로 “FizzBuzz를 작성하지 못했다 = 프로그래밍을 할 수 없다"라고 단언할 수 있을까요?


할 수 있느냐가 아니라, 할 수 있는 “상태"인가

확실히 FizzBuzz는 구문에 대한 이해와 기본적인 논리적 사고를 요구합니다. 그렇기 때문에 “기초 확인” 용도로 쓰인다는 점은 납득이 갑니다.

하지만 말입니다.

환경이 다르면 결과도 달라집니다.

예를 들어,

  • 초면인 면접관 앞에서 긴장했을 때
  • 갑자기 화이트보드를 건네받고, 수중에 에디터가 없을 때
  • “어라, modulo가 뭐였지?” 하고 갑자기 떠오르지 않을 때

…그런 적 없으신가요? 사람이니까요. 있을 수 있다고 생각합니다.

그래서 “FizzBuzz를 작성할 수 있는가"보다 “FizzBuzz를 작성할 수 있는 상태로 자신을 이끌 수 있는가"가 사실 더 중요하지 않을까 생각합니다.


흔한 “훈련하면 OK"라는 조언의 함정

이런 이야기를 하면 “그러니까 매일 연습해라!“라는 조언이 나오기 마련입니다.

물론, 반복 연습을 통해 술술 작성할 수 있게 되는 것은 사실이고, 그 자체는 좋은 일입니다. 하지만 “FizzBuzz를 작성하지 못하면 실격"이라는 전제에 서게 되면, 단지 공포로 변해버릴 수도 있습니다.

즉, “실수했다 = 나는 안 되나 보다"라고 느끼게 되는 구조가 되기 쉬운 것이죠.

예를 들어, 늦잠을 잔 날 “나는 게으름뱅이야…“라고 생각하기 쉽지 않나요? 하지만 그건 어쩌다 몸이 피곤했을 뿐일지도 모릅니다.

FizzBuzz도 마찬가지입니다.


그렇다 해도, FizzBuzz는 역시 좋은 질문이기도 하다

그렇다 해도, FizzBuzz가 나쁘다는 것은 아닙니다.

오히려 아주 잘 만들어진 질문이라고 생각합니다. 규칙이 간단하고 확장하기도 쉽습니다. 예를 들어 이렇게 바꿔보면 좀 더 사고가 깊어집니다.

1
2
3
4
5
6
7
for i in range(1, 101):
    output = ""
    if i % 3 == 0:
        output += "Fizz"
    if i % 5 == 0:
        output += "Buzz"
    print(output or i)

이것은 “if-elif-else가 아니더라도 작성할 수 있다"는 예시입니다. 꽤 스마트하죠.

즉, FizzBuzz는 “해냈는가"뿐만 아니라, “어떻게 작성하는가"나 “어디까지 이해하고 있는가"를 파악하기 위한 진입점도 될 수 있습니다.


그렇기 때문에

FizzBuzz를 할 수 있는지 여부에 너무 과도한 의미를 부여하지 않아도 된다고 생각합니다.

작성하지 못했다 하더라도, 그것은 단지 “지금 좀 컨디션이 안 좋았다"일 뿐일지도 모르고, 나중에 차분히 생각하면 할 수 있는 경우도 많습니다.

조급해하지 말고, 천천히 나아가 봅시다.

코드는 사람이 작성하는 것입니다. 사람이니까 잊어버릴 수도 있고, 긴장할 수도 있습니다. 그런 점을 받아들이면서, 조금씩 나아갈 수 있다면 충분하다고 생각합니다.

그럼, 오늘도 편안한 마음으로 코드를 작성해 봅시다.

comments powered by Disqus