References

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


Solution 1. my solution

function pyramid(n) {
  for (let stair = 1; stair <= n; ++stair) {
    let res = "";
    
    for (let sharp = 1; sharp <= 2 * stair - 1; ++sharp) {
      res += "#";
    }

    for (let space = 1; space <= n - stair; ++space) {
      res = " " + res + " ";
    }

    console.log(res);
  }
}

pyramid(5);
  1. for문 stairn만큼 row 쌓기.
  2. 결과값을 담을 빈 변수 res 선언.
  3. # 기호를 그릴 for문 sharp 작성. for문 1회당 2 * stair - 1만큼 탐색하며 # 기호를 그린다.
  4. n - stair만큼 공백을 # 기호 양쪽에 넣어주는 for문 space 작성.
  5. console.log로 결과값 반환.

Solution 2. with for loop

function pyramid(n) {
  const midpoint = Math.floor((2 * n - 1) / 2);

  for (let row = 0; row < n; ++row) {
    let level = "";

    for (let column = 0; column < 2 * n - 1; ++column) {
      if (midpoint - row <= column && midpoint + row >= column) {
        level += "#";
      } else {
        level += " ";
      }
    }

    console.log(level);
  }
}

pyramid(5);

Solution 3. recursive function

function pyramid(n, row = 0, level = "") {
  if (row === n) {
    return;
  }

  if (level.length === 2 * n - 1) {
    console.log(level);
    return pyramid(n, row + 1);
  }

  const midpoint = Math.floor((2 * n - 1) / 2);
  let add;
  if (midpoint - row <= level.length && midpoint + row >= level.length) {
    add = "#";
  } else {
    add = " ";
  }

  pyramid(n, row, level + add);
}

pyramid(5);

decription


위 모범답안 두 개의 핵심은 if문을 통해 column의 중앙값인 midpoint를 기준으로 양옆에 # 기호를 붙여나가는 것이다. 점감(漸減)하는 mid - row의 값과 점증(漸增)하는 mid + row의 값을 column값과 비교하여 두 조건이 모두 충족될 경우에만 # 기호를 해당 column에다 붙이고, 아니라면 공백을 넣는다.
여기서 for문으로써 탐색할 column의 범위는 2 * n - 1로 설정한다.

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

0개의 댓글