
재귀 문제
3^3=27이므로 크기 3의 패턴이 3번 반복되는 것
n이 9일 때
*********
* ** ** *
*********
*** ***
* * * *
*** ***
*********
* ** ** *
*********
가장 첫 줄에서 비어있는 곳의 좌표는 (1,1), (1,4), (1,7)
즉 3으로 나눴을 때 나머지가 1인 곳은 모두 비어있음
가운데 뚫린 공간의 좌표는 (3,3), (3,4), (3,5), (4,3), (4,4), (4,5), (5,3), (5,4), (5,5)
즉 /3한 것을 3으로 나눴을 때 나머지가 1인 곳은 비어있음
따라서 /1, /3, /9, ... 반복해서 나눈 결과가 3이 될 때까지 반복하면 됨
자바스크립트에서 몫 계산할 때는 꼭
Math.floor()등으로 소숫점 아래 떼어줘야 하는 거 까먹지 말기
javascript
자바스크립트는 반복문 안에서 출력하면 시간초과인 경우가 많으니 문자열로 따로 담아둔 다음 한 번에 출력하는 것이 좋다
// boj 2447 별 찍기 - 10
// recursion
const input = require("fs").readFileSync("./example.txt").toString().split("\n");
// const input = require("fs").readFileSync("/dev/stdin").toString().split("\n");
const n = Number(input[0]);
let result = "";
function star(i, j, n) {
if (Math.floor(i / n) % 3 === 1 && Math.floor(j / n) % 3 === 1) result += " ";
else {
if (Math.floor(n / 3) === 0) result += "*";
else star(i, j, n / 3);
}
}
for (let i = 0; i < n; i++) {
for (let j = 0; j < n; j++) star(i, j, n);
result += "\n";
}
console.log(result);