공부/프로그래머스

Lv1)JS-[1차]비밀지도

조용한외침 2022. 1. 13. 14:38

문제링크

 

느낀점

해당문제를 풀면서 기존에 풀었던 메서드가 생각에 남아있어서 어느정도 문제를 풀때 실마리가 되었다.

toString(num)을 사용하면 x 진법을 사용할 수 있다. 이를 기반으로 입력받은 배열을 2진법으로 변환후 split으로 숫자를 나눠 주었다. 그리고 반복문을 통해서 '#'과 '  '으로 변화를 줄 수 있도록 하였다. 

 

 

내가 푼 방법

function solution(n, arr1, arr2) {
    let answer = [];

    let modifiedArr1 = arr1.map((el) => el.toString(2).split(''));
    let modifiedArr2 = arr2.map((el) => el.toString(2).split(''));
    for (let i = 0; i < n; i++) {
        answer.push([]);
        if (modifiedArr2[i].length !== n) {
            for (let j = modifiedArr2[i].length; j < n; j++) {
                modifiedArr2[i].unshift('0');
            }
        }
        if (modifiedArr1[i].length !== n) {
            for (let j = modifiedArr1[i].length; j < n; j++) {
                modifiedArr1[i].unshift('0');
            }
        }
        for (let j = 0; j < n; j++) {
            if (modifiedArr2[i][j] === '1' && modifiedArr1[i][j] === '1') {

                answer[i].push('#');
            } else if (modifiedArr2[i][j] === '0' && modifiedArr1[i][j] === '0') {
                answer[i].push(' ');
            } else {
                answer[i].push('#');
            }
        }
        answer[i] = String(answer[i].join(''));
    }
    return answer
}

 

다른 방법

function solution(n, arr1, arr2) {
    let num1, num2, s;
    let answer = [];
    //manually turning decimals to binaries cos i can!
    for (let i=0; i<n; i++){
        num1 = arr1[i];
        num2 = arr2[i];
        s = '';
        for (let j=0; j<n; j++){
            s = (num1%2 + num2%2) ? '#'+s : ' '+s;
            num1 = Math.floor(num1/2);
            num2 = Math.floor(num2/2);
        }
        answer.push(s);
    }    
    return answer;
}