본문 바로가기
  • soldonii's devlog
Javascript 공부/알고리즘 풀이

자바스크립트 알고리즘(9) - steps

by soldonii 2019. 8. 26.

*Udemy의 "The Coding Interview Bootcamp: Algorithms + Data Structures" 강의에서 학습한 내용을 정리한 포스팅입니다.

*https://soldonii.github.io에서 작성한 글을 티스토리로 옮겨온 포스팅입니다.

*자바스크립트를 배우는 단계라 오류가 있을 수 있습니다. 틀린 내용은 댓글로 말씀해주시면 수정하겠습니다. 감사합니다. :)


지문

// Write a function that accepts a positive number N.
// The function should console log a step shape
// with N levels using the # character.  Make sure the
// step has spaces on the right hand side!
// --- Examples
//   steps(2)
//       '# '
//       '##'
//   steps(3)
//       '#  '
//       '## '
//       '###'
//   steps(4)
//       '#   '
//       '##  '
//       '### '
//       '####'

 

1번 풀이

1. row 안에서 for loop을 진행한다.

    1-1. 한 줄을 의미하는 stair 를 빈 string으로 초기화한다.

    1-2. column 안에서 for loop을 진행한다.

        1-2-1. 만일 column이 row보다 작거나 같을 경우에는, stair에 #를 넣는다.

        1-2-2. 그렇지 않을 경우에는 stair에 ‘ ‘을 넣는다.

    2-1. stair 를 console.log한다.

function steps(n) {
  for (let r = 0; r < n; r++) {
    let stair = '';
    for (let c = 0; c < n; c++) {
      if (c <= r) {
        stair += "#";
      } else {
        stair += ' ';
      }
    }
    console.log(stair);
  }
}

 

2번 풀이 : recursion을 활용

Recursion Tips

  • Figure out the bare minimum pieces of information to represent your problem.
  • Give reasonable defaults to the bare minimum pieces of info.
  • Check the base case. Is there any work left to do? If not, return.
  • Do some work. Call your function again, making sure the argument
  • Always think you ‘base case’ before writing codes.
function steps(n, row = 0, stair = '') {
  if (n === row) {
    return;
  }

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

  if (stair.length <= row) {
    stair += '#';
  } else {
    stair += ' ';
  }

  steps(n, row, stair);
}

댓글