티스토리 뷰

알고리즘/백준 문제풀이

백준 nodejs 2447번: 별 찍기 - 10

YG - 96년생 , 강아지 있음, 개발자 희망 2021. 10. 5. 16:59

const fs = require("fs");

const filePath = process.platform === "linux" ? "./input.txt" : "/dev/stdin"; //제 개발환경은 리눅스이기에 input.txt를 앞에 두었습니다.

// const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt'; // 실제 백준사이트에 제출할 때는 위에 filePath를 삭제하고 이 부분을 입력하면 됩니다.

let input = +fs.readFileSync(filePath).toString();

let answer = "";

const star = (i, j, num) => {
  if (i % 3 === 1 && j % 3 === 1) {
    // (1,1) , (1,4), (1,7) ,(4,1), ... 등 공백의 위치를 좌표로 계산한다면 %3 을 하였을 때 항상 나머지가 1이다
    answer += " ";
  } else {
    if (num === 1) {
      // 위의 조건에 부합하지 않고 num이 /3을  n번 하여 1이 되었다면 *을 출력한다
      answer += "*";
    } else {
      star(Math.floor(i / 3), Math.floor(j / 3), Math.floor(num / 3)); // num이 1이 아니라면 3으로 나누어서 재귀 알고리즘을 한다.
      //console.log("what");
    }
  }
};

for (let i = 0; i < input; i++) {
  // i = 0,1,2,3,4,5...input
  for (let j = 0; j < input; j++) {
    // j =0.1.2.3.4.5 ... input
    star(i, j, input); // 각각의 좌표일 때 함수 실행
  }
  answer += "\n";
}
console.log(answer);

 

너무 어려웠어서 다른 블로그를 보고 배웠습니다

 

이런 문제가 쉬워지려면 많이 풀어보아야 할 것 같습니다 

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함