아래 링크의 강의 중 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
로 설정한다.