Algorism

나무 그리기

자라나라나무나무나 2022. 7. 22. 19:17
각 행별로 개행문자(\n)을 넣어주면서 *을 찍으며 출력 값 형태로 나무를 그려준다.
function answer(height) {
  let str = "\n";

  for (let i = 0; i < height; i++) {
    // 1. 공백 처리 " "
    for (let j = 0; j < height - i - 1; j++) {
      str += " ";
    }

    // 2. * 처리 "*" 2n + 1
    for (let j = 0; j < i * 2 + 1; j++) {
      str += "*";
    }

    // 3. 개행문자 추가
    str += "\n";
  }

  return str;
}

let input = [

  3,

  5,

  7,
];

for (let i = 0; i < input.length; i++) {
  console.log(`#${i + 1} ${answer(input[i])}`);
}

풀이

 

이중 for문을 사용하여 큰 for문은 height의 길이만큼 반복이 되어야 트리의 윤곽이 잡힌다.

그와 동시에 공백과 별을 동시에 그려야 트리가 완성될 수 있다.

 

1. 공백처리

    for (let j = 0; j < height - i - 1; j++) {
      str += " ";
    }

공백은 입력값 보다 -1만큼의 갯수를 가지고 있다. 그리고 개행을 할 수록 i만큼 공백의 수가 작아지를 것을 알 수 있다.

입력값이 3일 경우에 첫번째 줄 공백은 2칸이고 두번째줄 공백은 1칸이다. 

 

2.  * 처리

    for (let j = 0; j < i * 2 + 1; j++) {
      str += "*";
    }

별의 갯수는 2n -1 이기 때문에  i*2 + 1 로 표현하였다.