[자바스크립트 연습문제] 12 풀이

이번 글은 연습문제 풀이입니다. 이전 글에서 연습문제를 풀어 보신 분들만 아래 내용을 확인하시길 바랍니다.






12-2 풀이

var count = 1;

while(count<=100){
  if(count%3 == 0 && count%5 ==0){
    console.log("FizzBuzz");
  }
  else if(count%3 == 0){
    console.log("Fizz");
  }
  else if(count%5 == 0){
    console.log("Buzz");
  }
  else {
    console.log(count);
  }
  
  count++;
}

반복문, 조건문, 각종 연산자가 들어있는 굉장히 좋은 연습 예제입니다. 이 예제를 완전히 이해할 수 있으면 프로그래밍의 기본을 이해했다고 볼 수 있습니다.

댓글

d
dia7691 2020.01.31
var cnt = 1;
while (cnt <= 100) {      if (cnt % 3 == 0 && cnt % 5 != 0) {         console.log("Fizz");     }else if (cnt % 3 != 0 && cnt % 5 == 0) {         console.log("Buzz");     }else if (cnt % 3 == 0 && cnt % 5 == 0) {         console.log("FizzBuzz");     }else if (cnt % 3 != 0 && cnt % 5 != 0){         console.log(cnt);     }     cnt++; }
이 코드로도 작동이 잘 되는 것 같네요 ㅎ
I
Ian H 2020.01.31
@dia7691,
안녕하세요^^ 작성하신 코드는 연습문제에서 제시한 조건을 조건을 모두 만족하므로 정답입니다!
다만, 작성하신 코드에서 마지막 else if는 그냥 else로 고치는 것이 바람직합니다. 처음 3가지 조건이 불만족인 경우 4번째 조건에 100% 만족하기때문이죠.
if 조건이 else로 끝나지 않는 경우에는 코드를 보는 사람입장에서 '조건문에 하나도 맞지 않는 경우가 존재하는 군'이라고 생각하는 것이 일반적입니다.
또한 4번째 조건은 컴퓨터 입장에서 연산할 필요가 없는데 연산을 하게 되므로 속도도 느려지게 됩니다. 위 코드에서는 반복문이 겨우 100번이므로 의미있는 속도차이가 없지만, 조건의 판독에 시간이 걸리는 경우, 반복의 수가 굉장히 큰 경우에는 4번째 조건이 없는 것이 속도를 높일 수 있습니다.
연산의 속도보다는 코드의 이해에 불필요한 부분이기 때문에 마지막 else if는 그냥 else로 고치는 것을 권해드려요.
d
dia7691 2020.02.03
@Ian H,
감사합니다!
양전 2020.02.16
    <script>   var num = 1     function fizzBuzz(){       while(num<101){         switch(num){           case num%3 == 0 :             console.log("Fizz")             break           case num%5 == 0 :             console.log("Buzz")             break           case (num%5 == 0) && (num%3 ==0) :             console.log("FizzBuzz")             break           default :             console.log(num)             num += 1                     }       }     }   fizzBuzz()     </script>
이런식으로 쓰는경우 case 문을 모두 무시하고 1~100까지만 log로나오는데 그 이유가 궁금합니다 ^^;
I
Ian H 2020.02.17
@양전,
안녕하세요~ switch문는 if문보다 할 수 있는 역할이 좁습니다. 그이유는, if문은 condition(조건)을 자유롭게 줄 수 있지만, switch문의 조건은 '값의 비교'만 가능하기 때문입니다.
작성하신 코드를 보면 case num%3 == 0 : 라고 작성하셨는데요, 이 case는 num%3 == 0 일 때 실행되는 것이 아니라, num%3 == 0이 num(switch(num)에서 num입니다)과 같을 때 실행됩니다. 
num%3 == 0 은 값을 true나 false를 가지는데, 이 값을 switch(num)의 num과 비교하게 되므로 조건이 항상 맞지 않아 모두 default로 가는 것입니다. 
질문하신 내용 외에 작성하신 코드에서 num의 증가는 default에서만 일어나는데, default는 항상 실행되는 것이 아니라, case에 맞는 경우가 없을 때만 실행됩니다. 그러므로 num은 switch문 밖에 작성하셔야 합니다.
설명이 조금 어렵게 된 것 같은데.. 이해안되시면 또 질문주세요^^
댓글쓰기

이 글에 댓글을 다시려면 SNS 계정으로 로그인하세요. 자세히 알아보기

UP