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






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를 빼줍니다.

+ Recent posts