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가 있으면 코드가 더 깔끔해진다.
끝까지 가면 결국 정규표현식인 것 같다
지금은 정규표현식까지 공부하기에는 시간이 부족해서 일단 보류해뒀지만, 정규표현식까지 공부하고 전부 리팩토링해볼 필요가 있겠다.