<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>FizzBuzz on kenji.blog</title><link>http://kenji.blog/ko/tags/fizzbuzz/</link><description>Recent content in FizzBuzz on kenji.blog</description><generator>Hugo -- gohugo.io</generator><language>ko</language><copyright>kenjinote</copyright><lastBuildDate>Fri, 18 Apr 2025 00:58:11 +0900</lastBuildDate><atom:link href="http://kenji.blog/ko/tags/fizzbuzz/index.xml" rel="self" type="application/rss+xml"/><item><title>'FizzBuzz'</title><link>http://kenji.blog/ko/p/fizzbuzz/</link><pubDate>Fri, 18 Apr 2025 00:58:11 +0900</pubDate><guid>http://kenji.blog/ko/p/fizzbuzz/</guid><description>&lt;img src="http://kenji.blog/p/fizzbuzz/img.png" alt="Featured image of post 'FizzBuzz'" />&lt;h2 id="fizzbuzz란-결국-무엇인가">FizzBuzz란 결국 무엇인가?
&lt;/h2>&lt;p>안녕하세요!&lt;/p>
&lt;p>오늘은 &amp;ldquo;FizzBuzz&amp;quot;에 대해 써보려고 합니다.&lt;/p>
&lt;p>&amp;ldquo;아, 그거 알아!&amp;rdquo; 하시는 분들도, &amp;ldquo;뭔가 들어본 적은 있는데 잘 모르겠다&amp;rdquo; 하시는 분들도 조금만 어울려 주세요. 몇 분이면 읽을 수 있고, 어쩌면 &amp;ldquo;그렇구나&amp;rdquo; 하고 고개를 끄덕이게 되실지도 모릅니다.&lt;/p>
&lt;hr>
&lt;h3 id="fizzbuzz를-작성하지-못하면-프로그래머-실격이라는-말은-사실일까">&amp;ldquo;FizzBuzz를 작성하지 못하면 프로그래머 실격&amp;quot;이라는 말은 사실일까?
&lt;/h3>&lt;p>FizzBuzz를 대략적으로 설명하자면 이런 식입니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;span class="lnt">8
&lt;/span>&lt;span class="lnt">9
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="k">for&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">101&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="mi">15&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;FizzBuzz&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="mi">3&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Fizz&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="mi">5&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Buzz&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">else&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>네, 이것이 바로 유명한 &amp;ldquo;FizzBuzz 문제&amp;quot;입니다.&lt;/p>
&lt;p>1부터 100까지의 숫자를 순서대로 확인하면서,&lt;br>
3의 배수라면 &amp;ldquo;Fizz&amp;rdquo;, 5의 배수라면 &amp;ldquo;Buzz&amp;rdquo;,&lt;br>
두 수의 공배수라면 &amp;ldquo;FizzBuzz&amp;quot;를 출력하는 아주 간단한 문제입니다.&lt;/p>
&lt;p>그런데 왜인지 &amp;ldquo;프로그래머로서의 최소한의 시험&amp;rdquo; 같은 취급을 받는 경우가 많습니다. 면접에서도 출제되고, SNS에서는 &amp;ldquo;FizzBuzz도 못 짜는 녀석이&amp;hellip;&amp;rdquo; 같은 우월감 섞인 발언도 심심치 않게 보입니다.&lt;/p>
&lt;p>하지만, 잠깐만 기다려 보세요.&lt;/p>
&lt;p>정말로 &amp;ldquo;FizzBuzz를 작성하지 못했다 = 프로그래밍을 할 수 없다&amp;quot;라고 단언할 수 있을까요?&lt;/p>
&lt;hr>
&lt;h3 id="할-수-있느냐가-아니라-할-수-있는-상태인가">할 수 있느냐가 아니라, 할 수 있는 &amp;ldquo;상태&amp;quot;인가
&lt;/h3>&lt;p>확실히 FizzBuzz는 구문에 대한 이해와 기본적인 논리적 사고를 요구합니다. 그렇기 때문에 &amp;ldquo;기초 확인&amp;rdquo; 용도로 쓰인다는 점은 납득이 갑니다.&lt;/p>
&lt;p>하지만 말입니다.&lt;/p>
&lt;p>환경이 다르면 결과도 달라집니다.&lt;/p>
&lt;p>예를 들어,&lt;/p>
&lt;ul>
&lt;li>초면인 면접관 앞에서 긴장했을 때&lt;/li>
&lt;li>갑자기 화이트보드를 건네받고, 수중에 에디터가 없을 때&lt;/li>
&lt;li>&amp;ldquo;어라, modulo가 뭐였지?&amp;rdquo; 하고 갑자기 떠오르지 않을 때&lt;/li>
&lt;/ul>
&lt;p>&amp;hellip;그런 적 없으신가요? 사람이니까요. 있을 수 있다고 생각합니다.&lt;/p>
&lt;p>그래서 &amp;ldquo;FizzBuzz를 작성할 수 있는가&amp;quot;보다 &amp;ldquo;FizzBuzz를 작성할 수 있는 상태로 자신을 이끌 수 있는가&amp;quot;가 사실 더 중요하지 않을까 생각합니다.&lt;/p>
&lt;hr>
&lt;h3 id="흔한-훈련하면-ok라는-조언의-함정">흔한 &amp;ldquo;훈련하면 OK&amp;quot;라는 조언의 함정
&lt;/h3>&lt;p>이런 이야기를 하면 &amp;ldquo;그러니까 매일 연습해라!&amp;ldquo;라는 조언이 나오기 마련입니다.&lt;/p>
&lt;p>물론, 반복 연습을 통해 술술 작성할 수 있게 되는 것은 사실이고, 그 자체는 좋은 일입니다. 하지만 &amp;ldquo;FizzBuzz를 작성하지 못하면 실격&amp;quot;이라는 전제에 서게 되면, 단지 공포로 변해버릴 수도 있습니다.&lt;/p>
&lt;p>즉, &amp;ldquo;실수했다 = 나는 안 되나 보다&amp;quot;라고 느끼게 되는 구조가 되기 쉬운 것이죠.&lt;/p>
&lt;p>예를 들어, 늦잠을 잔 날 &amp;ldquo;나는 게으름뱅이야&amp;hellip;&amp;ldquo;라고 생각하기 쉽지 않나요? 하지만 그건 어쩌다 몸이 피곤했을 뿐일지도 모릅니다.&lt;/p>
&lt;p>FizzBuzz도 마찬가지입니다.&lt;/p>
&lt;hr>
&lt;h3 id="그렇다-해도-fizzbuzz는-역시-좋은-질문이기도-하다">그렇다 해도, FizzBuzz는 역시 좋은 질문이기도 하다
&lt;/h3>&lt;p>그렇다 해도, FizzBuzz가 나쁘다는 것은 아닙니다.&lt;/p>
&lt;p>오히려 아주 잘 만들어진 질문이라고 생각합니다. 규칙이 간단하고 확장하기도 쉽습니다. 예를 들어 이렇게 바꿔보면 좀 더 사고가 깊어집니다.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="k">for&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">101&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">output&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="mi">3&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">output&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="s2">&amp;#34;Fizz&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="mi">5&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">output&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="s2">&amp;#34;Buzz&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">output&lt;/span> &lt;span class="ow">or&lt;/span> &lt;span class="n">i&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>이것은 &amp;ldquo;if-elif-else가 아니더라도 작성할 수 있다&amp;quot;는 예시입니다. 꽤 스마트하죠.&lt;/p>
&lt;p>즉, FizzBuzz는 &amp;ldquo;해냈는가&amp;quot;뿐만 아니라, &amp;ldquo;어떻게 작성하는가&amp;quot;나 &amp;ldquo;어디까지 이해하고 있는가&amp;quot;를 파악하기 위한 진입점도 될 수 있습니다.&lt;/p>
&lt;hr>
&lt;h3 id="그렇기-때문에">그렇기 때문에
&lt;/h3>&lt;p>FizzBuzz를 할 수 있는지 여부에 너무 과도한 의미를 부여하지 않아도 된다고 생각합니다.&lt;/p>
&lt;p>작성하지 못했다 하더라도, 그것은 단지 &amp;ldquo;지금 좀 컨디션이 안 좋았다&amp;quot;일 뿐일지도 모르고, 나중에 차분히 생각하면 할 수 있는 경우도 많습니다.&lt;/p>
&lt;p>조급해하지 말고, 천천히 나아가 봅시다.&lt;/p>
&lt;p>코드는 사람이 작성하는 것입니다. 사람이니까 잊어버릴 수도 있고, 긴장할 수도 있습니다. 그런 점을 받아들이면서, 조금씩 나아갈 수 있다면 충분하다고 생각합니다.&lt;/p>
&lt;p>그럼, 오늘도 편안한 마음으로 코드를 작성해 봅시다.&lt;/p></description></item></channel></rss>