
아래 링크의 강의 중 Section 12. Two Sided Steps - Pyramids의 내용을 추려 이번 글을 작성하였습니다.
The Coding Interview Bootcamp: Algorithms + Data Structures on Udemy
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);
for문 stair로 n만큼 row 쌓기.res 선언.# 기호를 그릴 for문 sharp 작성. for문 1회당 2 * stair - 1만큼 탐색하며 # 기호를 그린다.
n - stair만큼 공백을 # 기호 양쪽에 넣어주는 for문 space 작성.console.log로 결과값 반환.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);
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);

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