//해답
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;
}
여기서 이해 안 가는 부분 두가지: |, +a 는 대체 뭘 의미하는가?
참고_링크를 통해 알 수 있었다.
|: 비트 OR 연산자(a | b)로, 두 피연산자의 각 자리 비트의 값이 모두 0인 위치에 0을 반환한다.
9 | 30 = 31이고, 31의 2진수는 11111이다.
9의 2진수인 01001과 30의 2진수인 11110를 예시로 둘 때, 둘 다 0이면 0, 둘 중 하나라도 1이면 1을 반환하여 11111이 되고 이를 10진수로 바꾸면 31이다.
+a: 단항 연산자, 피연산자가 숫자 타입이 아니면 숫자로 변환을 시도한다.
+"3"은 3을 반환, +true는 1을 반환한다.
반대로, -"3"는-3을 반환한다.