아래 링크의 강의 중 Section 11. Printing Steps
의 내용을 추려 이번 글을 작성하였습니다.
The Coding Interview Bootcamp: Algorithms + Data Structures on Udemy
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문 i
로 n
만큼 행을 만들고, for문 j
로 열을 만든다. for문 i
를 돌면서 star
를 하나씩 증가시켜 나가고, for문 j
를 돌면서 공백을 추가하여 둘을 합친 값을 반환한다.
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문 row
로 n
만큼 행을 만들고, for문 col
로 n
만큼 열을 만든다. col
이 row
보다 작거나 같다면 stair
에 *
을 추가하고, 크다면 공백을 추가한다.
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 한 줄씩 출력.