본문 바로가기
Programming/JavaScript

숫자를 받아서 피라미드 모양으로 표시하는 방법 | Algorithm | JavaScript

by 혀코 2020. 9. 9.

안녕하세요. 혀코입니다.

이번 시간에는 숫자를 하나받아서 피라미드 모양으로 표시하는 방법에 대해서 알아보겠습니다.

1일때,
'#'

2일때,
' # '
'###'

3일때,
'  #  '
' ### '
'#####'

4일때,
'   #   '
'  ###  '
' ##### '
'#######'

 

function pyramid(n) {
   const midpoint = Math.floor((2 * n - 1) / 2);
   for(let row = 0; row < n; row++){
      let level = '';

      for(let col = 0; col < 2 * n - 1; col++) {
         if(midpoint - row <= col && midpoint + row >= col) {
            level += '#';
         } else {
            level += ' ';
         }
      }
      console.log(level);
   }
}

피라미드형식으로 표시할 때는 Math.floor를 이용해서 전체 열의 중앙이 되는 요소를 찾는 것이 중요합니다. column의 값은 n이 1일때, 1, n이 2일때, 3, n이 3일때 5, n이 4일때, 7이 되므로, 받은 n의 값에 곱하기 2해주고 빼기 1해준 값과 동일한 것을 확인할 수 있습니다. 중앙값은 Math.floor에 column의 값을 넣어주고 나누기 2해주면 중앙이 되는 요소를 찾을 수 있습니다. 그래서 n을 3으로 받는다고 가정할 때, 첫번째로 for loop을 돌릴때는 Math.floor 값이 2가 되고 row 값이 0이므로 if값에 해당하는 것은 2만 해당하기에 빈칸 빈칸 # 빈칸 빈칸 이런 형식으로 들어가고 row 값이 1증가되었을 때는 빈칸 # # # 빈칸 이런 형식으로 들어가고, row 값이 2증가되었을 때는 # # # # # 이런 형식으로 들어가게 됩니다. 

 

이번에는 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);
}

 

 

 

이렇게 숫자를 하나 받아서 피라미드 모양으로 표시하는 방법에 대해서 알아봤습니다.

유용하셨다면, 공감과 구독 부탁 드립니다.

감사합니다.

댓글