[algorithm/programmers] 비밀지도

stella·2020년 6월 15일

algorithm

목록 보기
5/7

비밀지도

문제

비밀지도

풀이

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진수로 한번에 변환해서 문자열 정규식을 이용해 치환만 시켜준 것
profile
겔름뱅이

0개의 댓글