JavaScript


問題の説明


秘密の地図
ニオは秘密の地図を手に持って、プロドが普段私房のお金を隠している場所を教えた.しかし、この秘密地図はデジタル暗号化されており、位置を確認するために解読が必要です.幸いなことに、地図のパスワードを解読する方法が書かれたメモも見つかった.
地図は、エッジ長nの正方形の配列形式で、各セルは「空白」(")または「壁」("#")の2種類で構成されています.
地図全体を2枚の地図で重ねることができます.それぞれ「地図1」と「地図2」と言います.地図1または地図2のいずれかが壁である部分は、地図全体でも壁である.地図1も地図2も空白の部分であり、地図全体においても空白である.
「地図1」と「地図2」はそれぞれ整数配列で暗号化されている.
暗号化された配列は,地図の横線ごとに壁部分を1に符号化し,空白部分を0に符号化したときのバイナリ値の配列である.


に答える

function solution(n, arr1, arr2) {
    let answer = [];
    // 2진수로 변환한 데이터를 담을 배열 선언
    let binary1 = [];
    let binary2 = [];
    for(let i=0; i<n; i++){
        binary1[i] = getBinary(arr1[i], n);
        binary2[i] = getBinary(arr2[i], n);
    }
    
    for(let i=0; i<n; i++){
        let s = '';
        for(let j=0; j<n; j++){
            if(binary1[i][j] === '#' || binary2[i][j] === '#'){  // 둘중에 하나라도 # 이면 #으로
                s += '#';
            }else {
                s += ' ';
            }
        }
        answer[i] = s;
    }
    return answer;
}

function getBinary(number, n){
    let s = '';
    // 각 자리의 2의 제곱 구하기 ( 가장 큰 자리수 부터 )
    let square = 1;
    for(let index=1; index<n; index++){
        square *= 2;
    }
    // 계속 나눌 수 있는지 판단하여 해당 자릿수에 '#', ' '채우기
    for(let i=0; i<n; i++){
        if(number/square >=1){
            s += '#';
            number -= square;
        }else{
            s += ' ';
        }
        square /= 2;
    }
    return s;
}
  • の数字をバイナリフォーマットに変換する考えが多すぎる.もっと勉強しなきゃ.
    注意:https://velog.io/@young18/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%ED%82%A4%ED%8C%A8%EB%93%9C-%EB%88%84%EB%A5%B4%EA%B8%B0-by-Javascript-ygcdks5u