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






13-1 풀이

for(var i=0; i<5; i++){

  var string = "";

  for(var j=0; j<5-i; j++){
    string = string+"*";
  }

  console.log(string);
}

전체 줄수가 5이고, i가 현재 줄의 번호이므로 각 줄당 5-i개의 별을 찍어주면 됩니다.

13-2 풀이

for(var i=0; i<5; i++){

  var string = "";

  for(var j=0; j<i; j++){
    string = string+" ";
  }

  for(var j=0; j<5-i; j++){
    string = string+"*";
  }

  console.log(string);
}

첫째줄에는 빈칸이 0칸, 별이 5칸, 둘째 줄에는 빈칸이 1칸, 별이 4칸 ... 즉 빈칸을 줄 번호-1(j<=i-1이 되고, 이것은 j<i와 같죠)만큼 먼저 찍어 준 다음, 별을 줄 번호의 반대로 찍어주면 되겠죠.

위 풀이에서는 for문 안에 2개의 for문을 사용했는데, 하나만 사용할 수도 있습니다.

for(var i=0; i<5; i++){

  var string = "";

  for(var j=0; j<5; j++){
    if(j<i){
      string = string+" ";
    }
    else {
      string = string+"*";
    }
  }

  console.log(string);
}

별찍기 예제를 처음 보시는 분들은 쉽게 이해가 잘 안되실 텐데, 노트에 i와 j의 값을 기록해 가면서 차근차근 코드를 따라 반목문을 진행해 봅시다. 저도 반복문 처음 배우고 별찍기 예제 처음 풀 때 몇 시간씩 걸려서 이해하려고 했었습니다. 결코 쉬운 예제가 아니므로 시간을 두고 이해하도록 합시다.

13-3 풀이

이 문제는 못풀어도 괜찮습니다. 참고만 하고 넘어가신 후 나중에 다시 도전해 보세요.

for(var i=0; i<5; i++){

  var string = "";

  for(var j=0; j<5; j++){
    if(j<5-i){
      string = string+"*";
    }
    else{
      string = string+" ";
    }
  }

  for(var j=0; j<5; j++){
    if(j>=i){
      string = string+"*";
    }
    else{
      string = string+" ";
    }
  }

  console.log(string);
}

왼쪽 반쪽을 그리는 조건과, 오른쪽 반쪽을 그리는 조건을 따로 나누어서 코딩한 모습입니다.

이걸 합치면 아래와 같이 됩니다.

for(var i=0; i<5; i++){

  var string = "";

  for(var j=0; j<10; j++){
    if(j<5&&j<5-i || j>=5&&j-5>=i){
      string = string+"*";
    }
    else{
      string = string+" ";
    }
  }

  console.log(string);
}

왼쪽 반쪽(j가 5보다 작은 경우)와 오른쪽 반쪽(j가 5와 같거나 큰 경우)을 합쳤습니다. 오른쪽 반쪽은 j값이 5부터 10까지이므로 조건에 사용되는 j에 5를 빼줍니다.

별찍기 예제는 반복문을 연습하는데 좋은 예제입니다.

반복문을 사용하여 위 그림처럼 별문자를 출력하려면 어떻게 코딩해야 할까요? 이 글에서는 우선 위 그림처럼 별찍는 방법을 설명한 후, 다른 모양으로 별찍는 방법을 연습문제로 드리겠습니다.

그림을 살펴보면, 첫째줄에는 별이 1개, 둘째줄에는 별이 2개.. 이런식으로 다섯번째 줄에는 별이 5개로 되어 있습니다. 출력을 5번 반복한다는 것을 알 수 있죠.

for(var i=0; i<5; i++){

  var string = "";

  //줄당 별의 갯수를 조절하는 부분
  //...

  console.log(string);
}

우선 이렇게 만들면 5줄을 출력하는 코드를 만들 수 있습니다. 다음으로 각각 줄의 별의 갯수를 조절해 주어야 합니다.

n번째 줄에는 n개 만큼의 별이 찍힙니다. 이때 몇번째 줄인지 알 수 있는 방법은 i입니다. 첫번째 줄은 i가 0, 2번째 줄은 i가 1 ... 이런 식이죠. 즉 i만큼 반복하여 별을 찍어주면 됩니다.

for(var i=0; i<5; i++){

  var string = "";

  for(var j=0; j<=i; j++){
    string = string+"*";
  }

  console.log(string);
}

이렇게 반복문 안에 반복문이 들어 있는 것을 다중반복문이라고 하고, 위의 경우에는 2중반복문이 되겠습니다. 반복문안의 반복문에는 반복에 사용되는 변수 이름으로 j를 사용하였는데, j는 단순히 알파벳 순서상 i 다음이기 때문에 주로 사용됩니다. 3중 반복문인 경우에 3번째 반복문에는 k가 주로 사용됩니다.

자 그럼, 위의 내용을 바탕으로 아래 그림처럼 별을 찍는 반복문을 만들어 봅시다.

연습문제 13-1

힌트: 별의 숫자가 줄 번호와 반대로 움직입니다.

연습문제 13-2

힌트: 빈칸을 먼저 찍고, 별을 찍어줘야 합니다.

연습문제 13-3

이 문제는 고난이도 보너스 문제입니다. 너무 어렵다면 그냥 넘어가셔도 좋습니다.

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






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++;
}

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

연습문제(12-1)

Hello World 예제가 프로그래밍 첫걸음이라면 Fizz Buzz 예제는 프로그래밍 기본기를 테스트하는 유명한 예제입니다. 이 예제는 반드시 혼자서 풀어보도록 합시다.

  • 1 부터 100까지 숫자를 차례대로 출력합니다.
  • 만약 숫자가 3으로 나누어 떨어지는 수라면, 수를 출력하지 않고 "Fizz"라는 문자열을 출력합니다.
  • 만약 숫자가 5로 나누어 떨어지는 수라면, 수를 출력하지 않고 "Buzz"라는 문자열을 출력합니다.
  • 만약 숫자가 3으로도 나누어 떨어지고 5로도 나누어 떨어지는 수라면, 위 조건들을 무시하고 "FizzBuzz"라는 문자열을 출력합니다.

코드를 실행하면 다음과 같이 문자열이 출력되어야 합니다.

1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
16
...

반복문, 조건문, 나머지 연산자(%)를 사용하여 코드를 만들어봅시다. 만약 잘 안되더라도 바로 정답을 보지 마시고 복습을 하여 반드시 혼자서 풀어보도록 합시다. 댓글로 질문 남겨주시면 답변드릴게요!

+ Recent posts