본문 바로가기

Algorithm

[프로그래머스] 비밀지도 with Javascript


비밀지도

2018 KAKAO BLIND RECRUITMENT

문제보기

 

내가 제출한 답안

function solution(n, arr1, arr2) {
    var answer = [];
    for (let i = 0; i < n; i++) {
        let tmp = (arr1[i] | arr2[i]).toString(2).replace(/1/g, '#').replace(/0/g, ' ');
        if (tmp.length !== n) {
            while (n > tmp.length) {
                tmp = ' ' + tmp;
            }
        }
        answer.push(tmp);
    }
    return answer;
}

 

나의 풀이

  • 반복문(for)를 활용하여 지도의 제일 윗줄부터 마지막 줄까지 탐색한다.
  • tmp 분석하기
    • 비트연산자(|)와 'toString'을 활용하여 2진법 형태(문자열)로 반환한다.
    • replace를 활용하여 '1'을 '#'으로 바꾼다.
    • replace를 활용하여 남아있는 '0'을 공백(' ')으로 바꾼다.
  • '#'과 공백으로 이루어진 tmp가 n자리만큼 되어있지 않을 경우 n자리가 될 때까지 tmp 앞에 공백을 더해준다.
  • 완성된 tmp를 answer에 push하여 보관한다.

 

자바스크립트 관련 학습내용

자바스크립트에서 비트 연산 OR

  • 연산 대상의 값을 내부적으로 2진법으로 전환하여 각 자리마다 1이 있을 경우 1을 반환하여 10진법 형태로 값을 반환한다.
  • (0 | 1), (1 | 0), (1 | 1) === 1
  • (0 | 0) === 0
  • 2진법 전환하여 32자리까지 연산 가능하고, 32자리 초과하면 그 이후로 생략한다.
const x = 7;        // 2진법 : 0000111
const y = 11;       // 2진법 : 0001011

console.log(x | y); // 2진법 : 0001111

// console 창 결과 : 15