[Algorithm/JavaScript] 비밀지도

Dico·2021년 4월 21일
0

[Algorithm/JavaScript]

목록 보기
18/18

Programmers Level.1 Question Review 🧩


문제출처: https://programmers.co.kr/learn/courses/30/lessons/17681

문제

문제 보러가기


제출 답안

function solution(n, arr1, arr2) {
  //이진수 변환 + 모자란 숫자자리만큼 앞에 '0' 붙이기 + 한 글자 단위로 쪼개기
    let newArr1 = arr1.map(v => (v.toString(2).padStart(n, 0).split('')));
    let newArr2 = arr2.map(v => (v.toString(2).padStart(n, 0).split('')));

  //이중배열을 순회하면서 1과 0 중 하나라도 1이 있다면 1 반환
  //#은 1로, 0은 공백으로 치환 + 배열의 글자 합쳐서 하나의 문자열로 반환
    return newArr1.map((arr, i) => {
        return arr.map((letter, j) => String(letter | newArr2[i][j]).replace(/1/g, '#').replace(/0/g, ' '));
    }).map(arr => arr.join(''));
}

오늘의 Lesson

  • 비트 연산자(|)OR 조건과 유사하다. 반면 비트 연산자(|) 는 boolean이 아니라 십진수를 반환한다. (1|0) 이면 1이 true이기 때문에 1을 반환. (or은 하나라도 true이면 true값을 바로 반환하기 때문에)
    JS비트연산자 설명 동영상
    비트연산자 참고 자료
  • padStart()는 특정 문자를 원하는 길이만큼 문자열 '앞'에 더해준다. '뒤쪽'에 더해져야 한다면 padEnd()메서드를 사용할 수 있다.
    padStart() MDN
    padEnd() MDN
  • 정규표현식에서 숫자는 특수문자도 아니고, 문자 그대로 해석되어야 하는 대상이 아니기 때문에 백슬래시(\)는 사용하지 않는다. 그냥 /1/g 면 1을 찾아준다.
    정규표현식 MDN
  • 비트 연산자가 사용된 다른 사람의 풀이:
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;
}
profile
프린이의 코묻은 코드가 쌓이는 공간

2개의 댓글

comment-user-thumbnail
2021년 5월 3일

와 map으로 완전 깔끔하게 풀었네용...! padStart, padEnd 잊고 있었는데, 오래만에 보니 다시 기억나네요 ㅎㅎ 전 오늘 링크드리스트 문제를 만났는데 전혀 새로운 느낌을 받았네여 ㅎㅎㅎㅎ 프린이 파이팅!

1개의 답글