문제가,, 사갈스 바갈스
N은 3, 6, 12, 24 이므로 상황별을 케이스를 나타내 규칙을 찾는다.
프렉탈 규칙이 있으므로 배열을 재귀적으로 반복하여 풀이할 수 있따
재귀는 가장 안쪽부터 실행되므로 윗부분에서 규칙을 찾으면 된다.
일단 최초 3은 단순한 배열로 나타내준다.
if (n === 3) {
return [" * ", " * * ", "*****"];
}
그리고 나서 기존의 별들에 띄어쓰기를 몇칸만큼 추가할지 규칙을 찾고, 기존의 별들을 두개로 추가하여 배열로 반환하고 재귀를 통해서 프렉탈을 만들어주면 된다.
const stars = drawStars(n / 2); // 12 // 6 // 3
const result = [];
가장 첫번째 줄을 가지고 보면, 3*2(k-1) 만큼 띄어쓰기칸을 추가하면 되는걸 확인할 수 있는데, 단순하게 나누기 2로 표현해줄 수 있다.
for (let s of stars) {
result.push(" ".repeat(n / 2) + s + " ".repeat(n / 2));
}
그리고 나서는 추가한걸 가지고 각 줄별로 가운데 띄어쓰기 한칸을 추가해주면 된다
for (let s of stars) {
result.push(s + " " + s);
}
function drawStars(n) { // 24
if (n === 3) {
return [" * ", " * * ", "*****"];
}
const stars = drawStars(n / 2); // 12 // 6 // 3
const result = [];
for (let s of stars) {
result.push(" ".repeat(n / 2) + s + " ".repeat(n / 2));
}
for (let s of stars) {
result.push(s + " " + s);
}
return result;
}
function solution(n) {
const stars_array = drawStars(n);
for (let star of stars_array) {
console.log(star);
}
}
const n = 24;
solution(n);