자릿수만큼 앞자리 0으로 채우는 방법
arr1[i]=Array.from({length:n-arr1[i].length}, () => 0).join('')+arr1[i];
function solution(n, arr1, arr2) {
function strChange(a) {
for (let i=0; i<a.length; i++) {
a[i]=a[i].toString(2);
if (a[i].length < n) {
a[i]=Array.from({length:n-a[i].length}, () => 0).join('')+a[i];
}
}
}
strChange(arr1);
strChange(arr2);
let answer = new Array(n).fill('');
for (let i=0; i<arr1.length; i++) {
for (let j=0; j<arr1.length; j++) {
if (arr1[i][j] === '1' || arr2[i][j] === '1') {
answer[i] += '#';
}
else {
answer[i] += ' ';
}
}
}
return answer;
}
console.log(solution(5, [9, 20, 28, 18, 11], [30, 1, 21, 17, 28]));
압축 방법 map( (a,i) => (a | b[i]))
var solution=(n,a,b)=>a.map((a,i)=>(a|b[i]).toString(2).padStart(n,0).replace(/0/g,' ').replace(/1/g,'#'))
/1|0/g
1혹은 0
function solution(n, arr1, arr2) {
return arr1.map((v, i) => addZero(n, (v | arr2[i]).toString(2)).replace(/1|0/g, a => +a ? '#' : ' '));
}
const addZero = (n, s) => {
return '0'.repeat(n - s.length) + s;
}
내장함수를 사용하지 않고 수동으로 2진수로 변환.
둘 중 하나라도 1이라는 건, 둘을 더해서 1보다 크면 ‘#’ 아니면 ‘ ‘라는 의미니까
function solution(n, arr1, arr2) {
let num1, num2, s;
let answer = [];
//manually turning decimals to binaries cos i can!
for (let i=0; i<n; i++){
num1 = arr1[i];
num2 = arr2[i];
s = '';
for (let j=0; j<n; j++){
s = (num1%2 + num2%2) ? '#'+s : ' '+s;
num1 = Math.floor(num1/2);
num2 = Math.floor(num2/2);
}
answer.push(s);
}
return answer;
}