문제

별찍기의 한계는 어디까지인가..

재귀적으로 별을 찍되, 각 패턴을 옆으로 이어서 그리기 위해서는 줄마다 배열로 만든 다음에 합쳐야 한다.

const INPUT_FILE = process.platform === "linux" ? "/dev/stdin" : "./inputs.txt";
const n = +require("fs").readFileSync(INPUT_FILE).toString().trim();
 
function printStar(c) {
  if (c === 3) return ["***", "* *", "***"];
 
  const star = printStar(c / 3);
  const size = star.length;
  const result = [];
 
  for (let i = 0; i < 3 * size; i++) {
    if (Math.floor(i / size) === 1) {
      result.push(star[i % size] + " ".repeat(size) + star[i % size]);
    } else {
      result.push(star[i % size].repeat(3));
    }
  }
 
  return result;
}
 
console.log(printStar(n).join("\n"));
 

가장 작은 단위에서의 패턴을 정의하고, 재구ㅢ적으로 돌면서 각 크기에 대한 패턴을 받아온다. 재귀적으로 가는 과정에서 패턴은 가운데를 제외하고 기존 패턴의 문자열을 반복하므로 위와 같이 분기 처리를 해준 다음에 공백을 넣어주었다. 이렇게 각 3의 제곱 수마다 패턴 배열을 만들고 다시 돌아와 마지막에는 이건 패턴을 가지고 최종 형태를 만들면 된다.