비밀지도

문제
비밀지도
풀이
function solution(n, arr1, arr2) {
let answer = [];
const newArr1 = arr1.map(e => e.toString(2).padStart(n, 0));
const newArr2 = arr2.map(e => e.toString(2).padStart(n, 0));
answer = newArr1.map((list, row) => {
return Array.from(list).map((el, col) => (el === '0' && newArr2[row][col] === '0') ? ' ' : '#').join('')
})
return answer;
}
- 지도 한변의 길이 n , 주어지는 두 지도 arr1, arr2 (두개를 겹쳐서 비밀지도를 얻는다)
- 벽은 1이고 공백은 0 (이진법?!!?)
- 2진수로 변환해서 비교해야한다는 생각에 Number.toString(radix)를 이용함 그런데, 0 떼고 나와서 padStart메소드를 활용해 붙여줌
- 이항연산으로 비교하여 0은 공백으로, 1의 경우는 #으로 치환하여 리턴
코드수정
function solution(n, arr1, arr2){
return arr1.map((e,i)=>(e|arr2[i]).toString(2).padStart(n,0).replace(/0/g,' ').replace(/1/g,'#'))
}
- 비트연산자를 한번에 떠올렸으면 좋았을텐데
- 이미 | 연산자는 10진수의 숫자를 2진수로 변환해서 OR 연산을 해줘서 10진수로 값을 내뱉어줬다. 그랬기 때문에 위의 비교연산 단계를 길게 할 필요 없어졌고 이미 된 값을 2진수로 한번에 변환해서 문자열 정규식을 이용해 치환만 시켜준 것