[1차] 비밀지도

2020.07.29

const decimalToBinary = (decimal, limit, binaryStr = "") => {
  const remainder = decimal % 2;
  binaryStr = remainder.toString() + binaryStr;
  const quotient = Math.floor(decimal / 2);
  if (quotient == 0) {
    if (binaryStr.length < limit) {
      const fillZero = limit - binaryStr.length;
      binaryStr = "0".repeat(fillZero) + binaryStr;
      return binaryStr;
    }
    return binaryStr;
  }
  return decimalToBinary(quotient, limit, binaryStr);
};

const solution = (n, arr1, arr2) => {
  const binaryOfArr1 = arr1.map((decimal) =>
    decimalToBinary(decimal, n)
      .split("")
      .map((char) => parseInt(char))
  );
  const binaryOfArr2 = arr2.map((decimal) =>
    decimalToBinary(decimal, n)
      .split("")
      .map((char) => parseInt(char))
  );
  return binaryOfArr1.map((binary, indexOfRow) => {
    return binary
      .map((digit, indexOfCol) => {
        if (digit || binaryOfArr2[indexOfRow][indexOfCol]) {
          return "#";
        }
        return " ";
      })
      .join("");
  });
};
  • 2진수 변환을 직접 구현할 필요가 없다니...

  • 알고리즘이란게 메소드 쓰는 연습을 하는 건 아니지만, 적절한 메소드를 알고 있으면 필요한 로직 구현에만 집중할 수 있으니까...

const solution = (n, arr1, arr2) => {
  const binaryOfArr1 = arr1.map((decimal) =>
    decimal
      .toString(2)
      .padStart(n, "0")
      .split("")
      .map((char) => parseInt(char))
  );
  const binaryOfArr2 = arr2.map((decimal) =>
    decimal
      .toString(2)
      .padStart(n, "0")
      .split("")
      .map((char) => parseInt(char))
  );
  return binaryOfArr1.map((row, indexOfRow) => {
    return row
      .map((col, indexOfCol) => {
        if (col || binaryOfArr2[indexOfRow][indexOfCol]) {
          return "#";
        }
        return " ";
      })
      .join("");
  });
};
  • repeat만 해도 굉장히 유용하다고 생각했는데, padStart가 있으면 코드가 더 깔끔해진다.

  • 끝까지 가면 결국 정규표현식인 것 같다

  • 지금은 정규표현식까지 공부하기에는 시간이 부족해서 일단 보류해뒀지만, 정규표현식까지 공부하고 전부 리팩토링해볼 필요가 있겠다.

0개의 댓글