알고리즘

[BOJ] 4779 - 칸토어 집함(JS)

로돌씨 2024. 11. 19. 21:04

 

const input = require("fs")
  .readFileSync("예제.txt")
  .toString()
  .trim()
  .split("\n")
  .map((v) => v.split(" ").map((v) => +v))
  .flat();

function cantore(str) {
  if (str.includes("---")) {
    const len = str.length / 3;
    const splitedArr = [];
    for (let i = 0; i <= str.length - len; i += len) {
      splitedArr.push(str.slice(i, i + len));
    }
    splitedArr[0] = cantore(splitedArr[0]);
    splitedArr[1] = splitedArr[1].replaceAll("-", " ");
    splitedArr[2] = cantore(splitedArr[2]);
    return splitedArr.join("");
  }
  return str;
}

const result = input.map((a) => {
  const dash = "-".repeat(3 ** a);
  return cantore(dash);
});

console.log(result.join("\n"));

 

cantore함수를 만든다.

이 함수는 만약 str이"---" 를 포함하고 있다면 str 의 길이 / 3 을 하여 len으로 할당한다.

splitedArr 배열을 만들어 3개로 나누어진 "-" 들을 첫번째배열에 또 재귀함수를 사용 ,중간의 배열은 "-" 를 공백으로 바꾸어주며 "- -" 로 나누어질때까지 반복한다. str 에 "---"가 포함되지않을때까지 반복했으므로 결과를 join으로 리턴한다.