카테고리 없음

백준 2448 자바스크립트 별 찍기 - 11

Ahyeon, Jung 2024. 7. 28. 13:08

 

문제가,, 사갈스 바갈스

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);