별 찍기(Printing Stars)

강명모(codingBear)·2022년 2월 22일
0

algorithm_JavaScript

목록 보기
13/36
post-thumbnail

References

아래 링크의 강의 중 Section 11. Printing Steps의 내용을 추려 이번 글을 작성하였습니다.
The Coding Interview Bootcamp: Algorithms + Data Structures on Udemy


Solution 1. my solution

function steps(n) {
  let star = "";
  let space = "";

  for (let i = 1; i <= n; ++i) {
    star += "*";
    for (let j = n - i; j > 0; --j) {
      space += " ";
    }

    console.log(star + space);
    space = "";
  }
}

steps(5);

for문 in만큼 행을 만들고, for문 j로 열을 만든다. for문 i를 돌면서 star를 하나씩 증가시켜 나가고, for문 j를 돌면서 공백을 추가하여 둘을 합친 값을 반환한다.


Solution 2. for loop with if

function steps(n) {
  for (let row = 0; row < n; ++row) {
    let stair = "";

    for (let col = 0; col < n; ++col) {
      if (col <= row) {
        stair += "*";
      } else {
        stair += " ";
      }
    }

    console.log(stair);
  }
}

steps(5);

for문 rown만큼 행을 만들고, for문 coln만큼 열을 만든다. colrow보다 작거나 같다면 stair*을 추가하고, 크다면 공백을 추가한다.


Solution 3. recursive function

function steps(n, row = 0, stair = "") {
  // base case. it is the most important to set correct base case.
  if (n === row) {
    return;
  }

  if (n === stair.length) {
    console.log(stair);
    return steps(n, row + 1);
  }

  const add = stair.length <= row ? "*" : " ";

  steps(n, row, stair + add);

  //   if (stair.length <= row) {
  //     stair += "*";
  //   } else {
  //     stair += " ";
  //   }

  //   steps(n, row, stair);
}

steps(5);

steps of recursive function

  • step.1
    1-1. steps(5, row = 0, stair = "#")
    1-2. steps(5, row = 0, stair = "#-")
    1-3. steps(5, row = 0, stair = "#--")
    1-4. steps(5, row = 0, stair = "#---")
    1-5. steps(5, row = 0, stair = "#----") → 이 단계에서 stair.length(5)와 n(5)이 같으므로 row + 1

  • step.2
    2-1. steps(5, row = 1, stair = "#")
    2-2. steps(5, row = 1, stair = "##")
    2-3. steps(5, row = 1, stair = "##-")
    2-4. steps(5, row = 1, stair = "##--")
    2-5. steps(5, row = 1, stair = "##---")

    ...step.3 ~ step.5

  • step5까지 돌고 각 단계의 마지막 줄을 console.log로 stair 한 줄씩 출력.


profile
front-end 분야를 중점으로 공부 중!🐣

0개의 댓글